XFA缺少填充字段



我正在使用pdfbox-1.8.12从pdf读取内容以获取XFA。我能够成功地获取大多数文件的XFA,而不会错过任何字段值。

麻烦是在某些文件(例如error.pdf)之类的文件。我有许多字段没有像CIN这样的值,但是当我在任何PDF查看器,Foxit或Acrobat中打开文件时,都会显示该字段。

    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;
    }
}

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

这是此文件的XFA,如果您在此搜索" U72300DL1996PLC075672',它将丢失。

这是一个普通文件,可以提供所有字段。

有什么想法吗?我已经尝试了一切,但我的猜测是,由于读者可以看到该价值,所以我也应该能够。

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

在代表表格在应用不同签名之前的表单中有多个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 parses之后的xref,即1.8中的pddocument.loadnonseq',如果有错误,则在幕后进行顺序解析。

最新更新