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

时间:2011-03-24 20:41:28

标签: java pdf unicode utf-8 pdfbox

我无法使用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 个答案:

答案 0 :(得分:7)

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

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