为什么我创建 PDF 文档时没有应用我的字体?
Why is my font not applied when I create a PDF document?
我正在使用 iText 生成 PDF 文档。当我尝试包含 "Agenda Tabular Light" 字体时,iText 会忽略我选择的字体。
我确认字体不是使用 Adobe Reader 的 文件 > 属性 > 字体 设置的。
PDF显示使用的是Helvetica,但我没有选择Helvetica。
颜色可见,但字体不可见。
我的代码如下所示:
public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLOR);
我什至尝试了一个示例程序。
// step 1
Document document = new Document();
// step 2
PdfWriter.getInstance(document, new FileOutputStream(filename));
// step 3
document.open();
// step 4:
Font font = FontFactory.getFont("Agenda Tabular Light");
System.out.println(font.toString());
document.add(new Phrase("Agenda Tabular Light J j", font));
Font fontbold = FontFactory.getFont("Times-Roman", 12, Font.BOLD);
document.add(new Phrase("Times-Roman, Bold", fontbold));
document.add(Chunk.NEWLINE);
document.close();
它的显示方式类似于 Times-Roman,并使用不同的议程字体。
但是每当我在 Adobe Reader 的属性中看到字体选项卡时,它都会显示 Helvetica。
如评论中所述,这通常不起作用:
Font font = FontFactory.getFont("garamond bold");
默认情况下,FontFactory
只知道 标准 Type 1 字体,而 "garamond bold"
不是这些字体之一,因此 Helvetica 将是改为使用(Helvetica 是 iText 中的默认字体)。
您可以"teach" FontFactory
通过注册找到其他字体。
你可以试试:
FontFactory.registerDirectories();
但这是一个非常昂贵的操作,因为您要求 iText 在您的操作系统中搜索不同字体目录中的字体文件(例如 C:/Windows/Fonts
)。这可能需要几秒钟的时间,你最终会得到比你需要的多得多的字体(也许你需要的字体无论如何都不会被注册)。
最好的方法是像这样注册你需要的字体:
FontFactory.register("c:/windows/fonts/garabd.ttf", "garamond bold");
我们告诉 iText 在哪里可以找到 ttf 文件 ("c:/windows/fonts/garabd.ttf"
) 并且我们为该字体定义了一个别名 ("garamond bold"
)。现在字体名称已经注册好了,我们可以开始使用了:
Font myBoldFont = FontFactory.getFont("garamond bold");
我正在使用 iText 生成 PDF 文档。当我尝试包含 "Agenda Tabular Light" 字体时,iText 会忽略我选择的字体。 我确认字体不是使用 Adobe Reader 的 文件 > 属性 > 字体 设置的。 PDF显示使用的是Helvetica,但我没有选择Helvetica。 颜色可见,但字体不可见。
我的代码如下所示:
public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLOR);
我什至尝试了一个示例程序。
// step 1
Document document = new Document();
// step 2
PdfWriter.getInstance(document, new FileOutputStream(filename));
// step 3
document.open();
// step 4:
Font font = FontFactory.getFont("Agenda Tabular Light");
System.out.println(font.toString());
document.add(new Phrase("Agenda Tabular Light J j", font));
Font fontbold = FontFactory.getFont("Times-Roman", 12, Font.BOLD);
document.add(new Phrase("Times-Roman, Bold", fontbold));
document.add(Chunk.NEWLINE);
document.close();
它的显示方式类似于 Times-Roman,并使用不同的议程字体。 但是每当我在 Adobe Reader 的属性中看到字体选项卡时,它都会显示 Helvetica。
如评论中所述,这通常不起作用:
Font font = FontFactory.getFont("garamond bold");
默认情况下,FontFactory
只知道 标准 Type 1 字体,而 "garamond bold"
不是这些字体之一,因此 Helvetica 将是改为使用(Helvetica 是 iText 中的默认字体)。
您可以"teach" FontFactory
通过注册找到其他字体。
你可以试试:
FontFactory.registerDirectories();
但这是一个非常昂贵的操作,因为您要求 iText 在您的操作系统中搜索不同字体目录中的字体文件(例如 C:/Windows/Fonts
)。这可能需要几秒钟的时间,你最终会得到比你需要的多得多的字体(也许你需要的字体无论如何都不会被注册)。
最好的方法是像这样注册你需要的字体:
FontFactory.register("c:/windows/fonts/garabd.ttf", "garamond bold");
我们告诉 iText 在哪里可以找到 ttf 文件 ("c:/windows/fonts/garabd.ttf"
) 并且我们为该字体定义了一个别名 ("garamond bold"
)。现在字体名称已经注册好了,我们可以开始使用了:
Font myBoldFont = FontFactory.getFont("garamond bold");