XFA缺少填充字段?

时间:2016-06-18 19:51:30

标签: pdf pdfbox xfa acrofields

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

然后将byte []转换为String。

This是此文件的xfa,如果您在此搜索“U72300DL1996PLC075672”,则会丢失。

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

任何想法?我已经尝试了一切,但我的猜测是,既然读者可以看到这个价值,我也应该能够做到。

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

1 个答案:

答案 0 :(得分:3)

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

PDDocument.load(file)

按顺序解析PDF并且不会拾取最新的XFA内容。如果您将其更改为

PDDocument.loadNonSeq(file,null)

使用外部参照信息,并提取包含您要查找的信息的最新XFA。

请注意,对于PDFBox 1.8.x,应始终使用PDDocument.loadNonSeq以便根据规范解析PDF,即遵循外部参照信息。 PDDocument.load用于处理带有(与外部参照相关的)解析错误的文件,其中顺序解析可能会后退。

对于PDFBox 2.x PDDocument.load在外部参照之后解析,例如`PDDocument.loadNonSeq'在1.8中,顺序解析是在幕后完成的,以防出现错误。