java - PDFbox遇到错误(如何计算非简单字体的位置)

标签 java apache jakarta-ee pdf pdfbox

我正在使用 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/

相关文章:

java - 当您不知道实际权限时,如何解决关键资源的权限分配不正确的问题

java - 编译组、名称等是什么?

apache - 容器总是需要更少的资源还是会产生额外的开销

python - 使用子路径在 Apache 反向代理后面重定向 Flask 登录

jakarta-ee - 在 Java 中使用 CDI 时是否需要默认构造函数?

eclipse - 使用 Macbook PRO 在服务器 tomcat 上运行 servlet 时出现 404 错误

java - 惯用的 Clojure 将资源从正在运行的 jar 复制到外部

java - 当我尝试从运行菜单执行 "reload changed classes"时,IntelliJ 给出错误访问被拒绝

java - Tomcat日志配置

java - 如何使 setMultipartConfig 适用于动态添加的 servlet?