我正在使用PDFBox从现有的PDF模板构建文档,以便打开文件、添加文本并保存。它很好用,但是当尝试使用外部TTF字体时就会出现问题。我尝试了不同的方法并搜索了两天的解决方案,但PDFBox上没有太多的信息。
下面是一些代码,使用字体“Tardy Kid”,因为它不会被误认为是其他任何东西,并且不太可能成为任何标准库的一部分。
代码执行良好,从println中显示“TardyKid”(表明字体已加载并且名称可获取),并显示文本——但它是用Helvetica字体显示的。代码中更复杂的部分使用getStringWidth()
来计算宽度,似乎也表明成功加载了宽度表。它只是不能正确地显示。
该代码在一个较大程序的上下文中运行,该程序打开现有的PDF文档(一个模板)并向其添加文本。除此之外,它似乎都正常工作。
public void setText ( PDDocument document, String text ) throws IOException {
int lastPage = document.getNumberOfPages() - 1;
PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(lastPage);
PDPageContentStream contentStream = null;
try {
contentStream = new PDPageContentStream(document,page,true,true,false);
File fontFile = new File(m_fontDir, "Tardy_Kid.ttf");
PDFont font = PDTrueTypeFont.loadTTF(document, fontFile);
Color color = new Color(196, 18, 47);
float x = 100f, y = 700f;
System.out.println(font.getBaseFont());
contentStream.setFont(font, 32);
contentStream.setNonStrokingColor(color);
contentStream.beginText();
contentStream.moveTextPositionByAmount(x,y);
contentStream.drawString(text);
contentStream.endText();
} finally {
if (contentStream != null) {
contentStream.close();
}
}
}