我使用PDFBox填充PDF表单中的字段,方法是获取PDTextbox,然后调用'set value'。我还使用Wordutils.wrap(Apache Commons)手动包装文本,我发现某些字符组合,特别是括号,会导致PDF文本字段中输出奇怪的字符。例如:
Pt.说:“我转身时膝盖扭动了一下,我跌倒了,我感觉有什么东西在(膝盖)动。当我试图站起来时,我崩溃了,因为它太疼了。”
在文本字段中显示为
他说:“我在转弯时膝盖扭伤了,我摔倒了,我感觉有什么东西在我的tj0-13t里动了。”
而字符串:Testing(character)encoding(issue)(knee)my knee)
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(form,“FieldName”,Object.GetDescription(),100);
我认为这是由于如何/在哪里调用Wordutils.wrap()引起的问题,但测试字符串无论如何都不应该换行,如果我从膝盖字符串中删除括号,它就会显示和换行。
有什么想法吗?!
根据PDFBOX-276和PDFBOX-716,pdfbox有错误处理右括号的历史。我的理解是)
字符被呈现为\
。因为\
是转义字符,所以在\
作为控制字符后,单个字符或字符会发生各种疯狂的事情,当然不会被打印出来。这完全可以解释您的情况
所以这里有一些建议:
长话短说,这是PDFBox的一个错误,希望他们现在已经修复了。
当我使用这个长字段名时,我没有得到任何错误,但是得到的PDF不包含我放在字段中的值。我想可能字段名有问题,所以我使用了Pdftk工具,它只给出了作为字段名。但是当我仅仅使用它时,我会得到error。救命?
我可以用以下代码填充文本框注释,但文本不会出现在某些阅读器中,比如Adobe Acrobat,尽管它确实出现在Chrome和其他基于Webkit的浏览器中。我试图填写的PDF文件不使用AcroForms或FDF。我使用的是ApachePDFBox,但我认为PDF库中没有太大差异,即使是跨语言/平台。 我尝试过将我的PDF输出与填充Chrome的文档进行比较,但我看到的唯一区别是默认外观(DA)属性
您是否设法在横向模式下填充PDF文档? 谢谢你的帮助。
我在用ApachePDFBox填写PDF表格。我使用的是TrueType字体(不是默认字体),叫做“Impact”,非常标准。在模板中,我有一个名为“Title”的字段,指定了影响字体。我使用下面的代码获取该模板,并用一个包含多个单词的值填充该字段。 问题是,当你查看创建的PDF时,单词之间有很大的空格。如果在Acrobat中打开PDF并单击该字段,文本将发生变化,大间距将消失。以任何方式编辑该字
字体Adobe希伯来文 文本方向RTL 我试过平场和不平场。 当字段没有平坦化时,在使用Acrobat Reader打开生成的PDF后,我看到了我的字段,但它是空的。只有在我点击该字段后,该字段的内容才会正确出现。当我在Chrome上查看PDF时,字段不会出现(或者它可能在那里,但里面没有文本)。 编辑:测试PDF可从这里下载
我目前正在使用FPDI在静态pdf文档上打印数字。当我尝试对带有可填充表单的pdf执行相同操作时,FPDI会抛出一个错误: “此文档([pdf path])可能使用了FPDI附带的免费解析器不支持的压缩技术。” 阅读文档FPDI显然无法做到这一点。搜索替代项并没有让我走那么远(我通常会找到预先填充表单字段的方法……但我需要在表单区域之外打印一个数字) 是否有人知道这方面的解决方案(例如替代LIB)