我正在使用 PDFBox 从现有的 PDF 模板构建文档,因此它会打开文件、向其中添加文本并保存它。它运行良好,除非尝试使用外部 TTF 字体。我尝试了不同的方法并搜索了 2 天的解决方案,但 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();
}
}
}