Java 使用PDFbox从ZapfDingbats绘制图示符
我试图在我的PDF文档中画一个复选标记(可以在PDF标准ZapfDingbats字体Unicode 2714中找到)。我是Apache的新手,目前正在使用2.0.0版(除了它是最新版本之外,没有具体原因) 我的代码如下所示:Java 使用PDFbox从ZapfDingbats绘制图示符,java,pdfbox,dingbats,Java,Pdfbox,Dingbats,我试图在我的PDF文档中画一个复选标记(可以在PDF标准ZapfDingbats字体Unicode 2714中找到)。我是Apache的新手,目前正在使用2.0.0版(除了它是最新版本之外,没有具体原因) 我的代码如下所示: PDDocument document = PDDocument.load(new File("myfile.pdf")); PDPage page = document.getPages().get(0); // first page PDPageContentStrea
PDDocument document = PDDocument.load(new File("myfile.pdf"));
PDPage page = document.getPages().get(0); // first page
PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, true);
PDType1Font font = PDType1Font.ZAPF_DINGBATS;
String glyph = "\u2714";
contentStream.beginText();
contentStream.setFont(font, fontSize);
contentStream.newLineAtOffset(10, 10); // towards lower left corner of page
contentStream.showText(glyph);
contentStream.endText();
contentStream.close();
document.save("output.pdf");
document.close();
。。。但这产生了一个很好的例外:
Exception in thread "main" java.lang.IllegalArgumentException: U+2714 ('a20') is not available in this font's encoding: WinAnsiEncoding
at org.apache.pdfbox.pdmodel.font.PDType1Font.encode(PDType1Font.java:345)
at org.apache.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:286)
:
通过代码进行调试表明,在PDType1Font.java:345
上发生的是:
PDType1Font扩展了PDSimpleFont
)PDSimpleFont.glyphList
正确地包含从Unicode代码点(U+2714)到PDF名称(“a20”)的映射,如异常文本所示(在PDSimpleFont
的ZapfDingbat字形构造函数中设置)PDType1Font
的构造函数行110中设置为winansienceoding
的PDSimpleFont.encoding
不包含名称a20
-这些名称(编码)在winansienceoding
类中静态设置-请参阅第36行的WIN\u ansienceoding\u表
常量PDType1Font font = PDType1Font.ZAPF_DINGBATS;
使用
更新:现已解决
这确实是一个bug,并解决了这个问题。它现在已在PDFBox 2.0.3版中解决。感谢您的建议。不幸的是,我的目标是平台独立性(因此Java、PDF和标准字体),开发/生产组合确实包括Linux。。。将查看JIRA是否有什么结果,同时可能尝试学习原始命令(使用库正是因为希望避免:-()@fr13d最有可能使用(已弃用)原始命令。如果您需要帮助,请在邮件列表或您打开的问题中提及,提及您需要的标志符号,我会帮助您(不是星期五,因为我会很忙)。
PDFont font = PDType0Font.load(document, new File("c:/windows/fonts/arialuni.ttf"));