PDFBox U+00A0 在此字体的编码中不可用

2024-01-03

我在调用 PDField 的 setValue 方法并尝试设置包含特殊字符的值时遇到问题。

field.setValue("TEST-BY  (TEST)")

详细来说,如果我的值包含 U+00A0 等字符,我会收到以下异常:

引起原因:java.lang.IllegalArgumentException:U+00A0 不是 在此字体的编码中可用:WinAnsiEncoding

完整的 stracktrace 可以在这里找到:堆栈跟踪 https://pastebin.com/bt3EYjv2

我目前已将 PDType1Font.TIMES_ROMAN 设置为字体。为了解决这个问题,我也尝试了其他可用的字体。同样的问题仍然存在。

我在这个答案中找到了以下建议https://stackoverflow.com/a/22274334/7434590 https://stackoverflow.com/a/22274334/7434590但由于我们使用 setValue 而不是任何可以操作字节的方法 showText/drawText,我无法使用这种方法,因为 setValue 只接受字符串作为参数。

Note:我无法用其他字符替换字符来解决此问题,我必须能够在 setValue 方法中设置字体字符支持的任何类型。


您必须嵌入字体并且不能使用 WinAnsiEncoding:

PDFont formFont = PDType0Font.load(doc, new FileInputStream("c:/windows/fonts/somefont.ttf"), false); // check that the font has what you need; ARIALUNI.TTF is good but huge
PDResources res = acroForm.getDefaultResources(); // could be null, if so, then create it with the setter
String fontName = res.add(formFont).getName();
String defaultAppearanceString = "/" + fontName + " 0 Tf 0 g"; // adjust to replace existing font name
textField.setDefaultAppearance(defaultAppearanceString);

请注意,此代码必须在调用之前运行setValue().

有关此内容的更多信息,请参见CreateSimpleFormWithEmbeddedFont.java https://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/interactive/form/CreateSimpleFormWithEmbeddedFont.java?view=markup示例来自源代码下载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDFBox U+00A0 在此字体的编码中不可用 的相关文章

随机推荐