Java PDFBox/WordUtils:填充的PDF表单文本框中的奇怪字符

Java PDFBox/WordUtils:填充的PDF表单文本框中的奇怪字符,java,apache,pdf,pdfbox,Java,Apache,Pdf,Pdfbox,我使用PDFBox来填充PDF表单中的字段,方法是获取一个PDTextbox,然后调用“setValue”。我还使用WordUtils.wrap(Apache Commons)手动包装文本。我发现某些字符组合,特别是涉及括号的字符组合,导致PDF文本字段中输出奇怪的字符。例如: Pt。他说:“我在转身,我的膝盖在我下面扭曲,我摔倒了,我感觉到有什么东西在动(在我的膝盖上)。当我试图站起来时,我崩溃了,因为它太疼了。” 在文本字段中显示为 Pt。声明“我在转弯,我的膝盖在我下面扭曲,我摔倒了,我感

我使用PDFBox来填充PDF表单中的字段,方法是获取一个PDTextbox,然后调用“setValue”。我还使用WordUtils.wrap(Apache Commons)手动包装文本。我发现某些字符组合,特别是涉及括号的字符组合,导致PDF文本字段中输出奇怪的字符。例如:

Pt。他说:“我在转身,我的膝盖在我下面扭曲,我摔倒了,我感觉到有什么东西在动(在我的膝盖上)。当我试图站起来时,我崩溃了,因为它太疼了。”

在文本字段中显示为

Pt。声明“我在转弯,我的膝盖在我下面扭曲,我摔倒了,我感觉有什么东西在(我的)Tj 0-13 T中移动”

鉴于字符串: 测试(字符)编码(问题)(膝盖)我的膝盖)

导致根本不显示任何内容。第一个字符串(re:The Kneet)也不会正确换行,直到您单击文本并正确显示(我看到其他文本字段问题似乎在您单击文本框时自行解决)

以下是我正在使用的代码:

public static void setTextboxValue(PDAcroForm form, String fieldName, String value) throws Exception {
    String newValue = "";
    if (value != null)
        newValue = value;

    // Clean up CR / LF characters, replace with newlines.
    newValue = newValue.replace("\r", "");

    PDTextbox box = getTextbox(form, fieldName);
    if (box != null)
        box.setValue(newValue);
}

public static void setTextboxValue(PDAcroForm form, String fieldName, String value, int wrapLength) throws Exception {
    String newValue = "";
    if (value != null)
        newValue = value;

    setTextboxValue(form, fieldName, WordUtils.wrap(newValue, wrapLength, "\n", true));
}
在本例中,我调用的是
setTextboxValue(形式为“FIELDNAME”,object.getDescription(),100)我假设这是由调用WordUtils.wrap()的方式/位置引起的问题,但测试字符串无论如何都不应该换行,如果我从膝关节字符串中删除括号,它就会显示并换行

有什么想法吗

根据和,pdfbox有错误处理右括号标记的历史。据我所知,
字符被渲染为
\
。因为
\
是转义字符,所以在
\
用作控制字符之后的单个字符或多个字符上会发生各种疯狂的事情,当然不会被打印出来。这完全可以解释你的处境

以下是一些建议:

  • 看看不同版本的PDFBox,可能吗?我提到的错误来自2010年,所以希望他们现在能解决这个问题。当时PDFBOX-276在代码中添加了一个补丁。我相信PDFBOX-716是移除PDFBOX-276补丁的补丁
  • 由于您正在以PDF格式输出,请尝试转义所有右括号,看看这是否有帮助
  • 长话短说,这是PDFBox的一个bug,希望他们现在已经修复了