使用 PDFBox 将 UTF-8 编码字符串写入 PDF
我在使用 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();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您正在使用 Adobe Reader 提供的内置“Base 14”字体之一。这些字体不是 Unicode;它们实际上是标准的拉丁字母,尽管有一些额外的字符。看起来你提到的字符,一个小写的 s 加上一个抑扬符 (š),在 PDF 拉丁语文本中不可用...尽管大写的 Š 可用,但奇怪的是仅在 Windows 上。请参阅 PDF 规范的附录 D,网址为 http://www.adobe.com/devnet/pdf /pdf_reference.html 了解详细信息。
不管怎样,言归正传……如果你想使用 Unicode 字符,你需要嵌入 Unicode 字体。确保您有权嵌入您决定使用的任何字体...我可以推荐开源 Gentium 或 Doulos< /a> 字体,因为它们是免费的、高质量的并且具有全面的 Unicode 支持。
You are using one of the inbuilt 'Base 14' fonts that are supplied with Adobe Reader. These fonts are not Unicode; they are effectively a standard Latin alphabet, though with a couple of extra characters. It looks like the character you mention, a lowercase s with a caron (š), is not available in PDF Latin text... though an uppercase Š is available but curiously on Windows only. See Appendix D of the PDF specification at http://www.adobe.com/devnet/pdf/pdf_reference.html for details.
Anyway, getting to the point... you need to embed a Unicode font if you want to use Unicode characters. Make sure you are licensed to embed whatever font you decide on... I can recommend the open-source Gentium or Doulos fonts because they're free, high quality and have comprehensive Unicode support.