使用 PDFBox 将 UTF-8 编码的字符串写入 PDF

2022-09-03 07:47:57

我在使用PDFBox将Unicode字符编写到PDF时遇到问题。下面是一些生成垃圾字符而不是输出“š”的示例代码。我可以添加哪些内容来获得对 UTF-8 字符串的支持?

PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);

PDType1Font font = PDType1Font.HELVETICA;
contentStream.setFont(font, 12);
contentStream.beginText();
contentStream.moveTextPositionByAmount(100, 400);
contentStream.drawString("š");
contentStream.endText();
contentStream.close();
document.save("test.pdf");
document.close();

答案 1

您使用的是 Adobe Reader 随附的内置“Base 14”字体之一。这些字体不是Unicode;它们实际上是标准的拉丁字母,尽管有几个额外的字符。看起来您提到的字符,带有caron(š)的小写字母s,在PDF拉丁文本中不可用...虽然大写的Š是可用的,但奇怪的,仅在Windows上。有关详细信息,请参阅 http://www.adobe.com/devnet/pdf/pdf_reference.html 的 PDF 规范的附录 D。

无论如何,直截了当...如果要使用 Unicode 字符,则需要嵌入 Unicode 字体。确保您已获得嵌入您决定的任何字体的许可...我可以推荐开源的GentiumDoulos字体,因为它们是免费的,高质量的,并且具有全面的Unicode支持。


答案 2

推荐