我正在使用PDFBox從現有PDF模板創建文檔,因此它會打開文件,向其添加文本並將其保存。除了嘗試使用外部TTF字體時,它運行良好。我已經嘗試了不同的方法,並搜索了2天的解決方案,但是PDFBox上並沒有太多內容。PDFBox嵌入式TTF字體不能正常工作
這是一些代碼,使用字體"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();
}
}
}
經過進一步測試,似乎只有在此之後再次調用SetFont時,纔會出現該問題,以查看另一段文本。看起來,所有的文本都會恢復到最後的字體集。如果我只設置一個文本,或同一字體中的多個文本(Tardy Kid),它就可以工作。 –