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

时间:2015-09-16 20:25:27

标签: pdf fonts itext

我使用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。

1 个答案:

答案 0 :(得分:1)

正如评论中所解释的,这通常不起作用:

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

默认情况下,FontFactory只知道标准的Type 1 字体,"garamond bold"不是这些字体之一,因此将使用Helvetica(Helvetica是iText中的默认字体。

您可以通过注册来“教导”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");