gpt4 book ai didi

java - 使用 IText 在 PDF 中嵌入非嵌入字体

转载 作者:行者123 更新时间:2023-12-01 09:58:16 26 4
gpt4 key购买 nike

所以我遇到了以下问题。我收到 PDF包含一组字体的文件。这些字体未嵌入到文件中。这是一个简单的例子:

non embedded font

我想将这些字体嵌入 PDF 中,因此它们是独立的并且始终可用。但事情似乎并没有那么简单。我正在使用 IText 做我的PDF处理。

我已阅读并尝试了以下问题/答案:

但是让我最接近的是以下示例: EmbedFontPostFacto.java (来自书中)。我能够嵌入 Arial提供 Arial.ttf 时的字体文件。

embedded font

但是与其他示例一样,我需要字体的源文件才能嵌入它。就我而言,我没有源文件。但我可能会将它们保留在系统上。所以我想查询系统上可用的字体,看看它是否与给定的字体相对应。

类似的东西

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
java.awt.Font[] fonts = e.getAllFonts();
for(java.awt.Font f : fonts){
System.out.println(f.getFontName());
}

但我无法转换给定的 java.awt.Font进入RandomAccessFilebyte[]用于嵌入字体文件本身。是否有另一种方法可以将字体嵌入 PDF ,没有字体本身的源文件?

最佳答案

对于 Windows C:\Windows\Fonts 或此类包含所有字体文件,并且在资源管理器中还显示字体名称。因此手动搜索是可行的。

在 java 中,您可以使用 GraphicsEnvironment.getAvailableFontFamilyNames()Font.getFamilyName() 来检查 PDF 中的名称,例如“Arial MT”。

但是 Font 中缺少该文件的 getter。

因此列出字体目录的所有文件,并将每个文件作为Font连续加载。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font font = Font.createFont(Font.TRUETYPE_FONT, ttfFile);
ge.registerFont(font); // If you want to load the font.

if (pdfFontName.startsWith(font.getFamilyName()) {
System.out.printf("%s - %s / %s%n", ttfFile.getName(), font.getFamilyName(),
font.getName());
}

关于java - 使用 IText 在 PDF 中嵌入非嵌入字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37023057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com