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

为什么创建PDF文档时不应用我的字体?,pdf,fonts,itext,Pdf,Fonts,Itext,我正在用iText生成PDF文档。当我尝试包含“议程表格灯”字体时,iText忽略了我对字体的选择。 我确认没有使用Adobe Reader的文件>属性>字体设置字体。 PDF显示使用了Helvetica,但我没有选择Helvetica。 颜色可见,但字体不可见 我的代码如下所示: public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLO

我正在用iText生成PDF文档。当我尝试包含“议程表格灯”字体时,iText忽略了我对字体的选择。 我确认没有使用Adobe Reader的文件>属性>字体设置字体。 PDF显示使用了Helvetica,但我没有选择Helvetica。 颜色可见,但字体不可见

我的代码如下所示:

public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLOR);
FontFactory.register("c:/windows/fonts/garabd.ttf", "garamond bold");
我甚至试过一个示例程序

// 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();
它像泰晤士报一样显示,并使用不同的字体显示议程。
但每当我在Adobe Reader的属性上看到字体选项卡时,它就会显示Helvetica。

如注释中所述,这通常不起作用:

Font font = FontFactory.getFont("garamond bold");
默认情况下,
FontFactory
只知道标准的Type 1字体,
“garamond bold”
不是这些字体之一,因此将改用Helvetica(Helvetica是iText中的默认字体)

您可以通过注册
FontFactory
来“教导”在何处查找其他字体

你可以试试:

FontFactory.registerDirectories();
但这是一个非常昂贵的操作,因为您要求iText在操作系统中搜索不同字体目录(例如
C:/Windows/Fonts
)中的字体文件。这可能需要几秒钟的时间,最终你会得到比你需要的更多的字体(而且你需要的字体可能不会被注册)

最好的方法是注册您需要的字体,如下所示:

public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLOR);
FontFactory.register("c:/windows/fonts/garabd.ttf", "garamond bold");
我们告诉iText在哪里可以找到ttf文件(
“c:/windows/fonts/garabd.ttf”
),并为该字体定义别名(
“garamond bold”
)。现在字体名为registerd,我们可以开始使用它:

Font myBoldFont = FontFactory.getFont("garamond bold");

很难相信您的企业需要您使用过时的、不受支持的iText版本(从2009年7月开始)。请升级到较新的版本,以避免iText 2.1.7中存在的法律和技术问题,我们将再看看您的问题。这是在生产中,升级到最新版本不是我决定的。但是我需要设置字体,所有的东西都会设置好,比如大小,颜色,但不是特别是字体。您是否可以提供解决方案?是的,正如文档中明确指出的,如果您不先使用别名注册字体,则不能使用字体别名,如
“议程表格灯”
。谁决定升级过程?请让我们知道,这样我们可以避免客户使用有问题的iText版本。谢谢Bruno,我会先注册。关于升级,我应该先和我的经理谈谈。在那之后我可以让你知道。谢谢,它成功了,我也在PDF的属性上得到了它。