为什么我创建 PDF 文档时没有应用我的字体?

Why is my font not applied when I create a PDF document?

我正在使用 iText 生成 PDF 文档。当我尝试包含 "Agenda Tabular Light" 字体时,iText 会忽略我选择的字体。 我确认字体不是使用 Adob​​e 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,并使用不同的议程字体。 但是每当我在 Adob​​e 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");