如何使用 pdfbox 检索 acrofield 的全名

How to retrieve the full name of an acrofield with pdfbox

我有一个带有 acroform 字段的 pdf,现在我需要找到相应的 PDField 对象。 为此,我正在使用此代码

public PDField getPDFieldWithName(final String fieldname){
    PDDocumentCatalog docCatalog = pdDocument.getDocumentCatalog();
    PDAcroForm acroForm = docCatalog.getAcroForm();
    return acroForm.getFields().stream()
                        .filter( x -> x.getPartialName().equalsIgnoreCase(fieldname))
                        .findFirst()
                        .get();
}

这适用于普通字段,但如果 pdf 上的字段用点分组并且使用了其中一个字段,则它不起作用。

正如我所看到的,PDFBox 处理诸如 PDNonTerminalField 之类的字段,是否有一种简单的方法来获取最新的子项并对其进行检查?

在我的表单上有一个名为 Test.foo.bar 的字段,当我使用上述方法搜索名称为 "Test.foo.bar" 的字段时,它没有找到它

java.util.NoSuchElementException: No value present

getFields 仅 returns 根字段。更好的解决方案是调用 getFieldIterator()。或者,如果您有全名,请直接致电 getField(fullyQualifiedName)