首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XFA缺少填充的字段吗?

XFA缺少填充的字段吗?
EN

Stack Overflow用户
提问于 2016-06-18 19:51:29
回答 1查看 338关注 0票数 0

我使用pdfbox-1.8.12读取PDF中的内容以获得XFA。我已经成功地获得了大多数文件的XFA,而没有遗漏任何字段值。

麻烦在于一些像error.pdf这样的文件。我有许多字段没有CIN这样的值,但是当我在任何PDF查看器、foxit或Acrobat中打开文件时,都会显示该字段。

代码语言:javascript
复制
    public static byte[] getParsableXFAForm(File file) {
    if (file == null)
        return null;
    PDDocument doc;
    PDDocumentCatalog catalog;
    PDAcroForm acroForm;
    PDXFA xfa;
    try {
        doc = PDDocument.load(file);
        catalog = doc.getDocumentCatalog();
        acroForm = catalog.getAcroForm();
        xfa = acroForm.getXFA();
        byte[] xfaBytes = xfa.getBytes();
        doc.close();
        return xfaBytes;
    } catch (IOException e) {
        // handle IOException
        // happens when the file is corrupt.
        System.out.println("IOException");
        return null;
    }
}

然后将byte[]转换为字符串。

是这个文件的xfa,如果在这个文件中搜索'U72300DL1996PLC075672',它将丢失。

这是一个正常文件,提供所有字段。

有什么想法吗?我试过所有的东西,但我的猜测是,既然读者可以看到这种价值,我也应该能够看到。

编辑:您必须下载这些文件,您可能无法在浏览器中查看它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-19 06:48:52

表单中有多个XFA内容条目,表示表单在应用不同签名之前的不同状态。正如你所用的

PDDocument.load(file)

PDF是按顺序解析的,并且没有获取最新的XFA内容。如果你把它改成

PDDocument.loadNonSeq(file,null)

使用Xref信息,提取最新的XFA,其中包含您要查找的信息。

请注意,对于PDFBox 1.8.x,应该始终使用PDDocument.loadNonSeq来解析符合规范的PDF,即遵循Xref信息。PDDocument.load应该只使用来处理带有(与Xref相关的)解析错误的文件,在这些错误中,顺序解析可能会倒退。

对于PDFBox,2.x PDDocument.load解析遵循Xref,如1.8中的`PDDocument.loadNonSeq‘,然后在幕后进行顺序解析,以防出现错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37901050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档