我正在使用 pdfbox 填写 pdf 文件中的表单,应用程序能够显示表单上可用字段的数量,但它返回以下错误
Messages:
Error: Don't know how to calculate the position for non-simple fonts
File: org/apache/pdfbox/pdmodel/interactive/form/PDAppearance.java
Line number: 616
代码
.....
while (fieldsIter.hasNext()) {
PDField field = (PDField) fieldsIter.next();
setField(pdf, field.getPartialName(), "My input");
//setField(pdf, field.getFullyQualifiedName(), "My input");
}
.....
public void setField(PDDocument pdfDocument, String name, String value) throws
IOException {
PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDField field = acroForm.getField(name);
if (field != null) {
field.setValue(value);
} else {
System.err.println("No field found with name:" + name);
}
}
如果您需要代码的任何其他部分,请告诉我。
最佳答案
pdfbox 中似乎存在一个错误,在各种情况下都会出现无法找到相关字体的情况。我能找到的唯一解决方法是跳过在 PDTextbox.setValue
中运行的更新外观代码。您可以通过执行以下操作“强制”更新该值:
COSString fieldValue = new COSString("Awesome field value");
textbox.getDictionary().setItem(COSName.V, fieldValue);
据推测,除了极端情况外,PDF 查看器都可以处理字体的渲染,并且只需为字段设置 V
项就足够了。主观上,我生成的文档在 Acrobat 和 OS X 预览中打开得很好。
相关问题: https://issues.apache.org/jira/browse/PDFBOX-1550
编辑添加:默认情况下,acrobat 似乎会创建可见文本区域大小为 0 的字段。对于存在此问题的文档,您可以通过添加 textbox.getDictionary().setItem(COSName.AP , null);
并希望读者能够正确处理外观渲染。
关于java - PDFbox遇到错误(如何计算非简单字体的位置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398433/