我使用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。
答案 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");