2016-06-18 24 views
0

私はpdfbox-1.8.12を使用してXFAを取得するためにPDFからコンテンツを読み込みます。 ほとんどのファイルでXFAを取得できましたが、フィールド値を忘れることはありませんでした。XFAに入力フィールドがありませんか?

error.pdfのようないくつかのファイルで問題が発生しています。フィールドの多くにCINのような値はありませんが、PDFビューアでファイルを開くと、フィールドやフィールドが表示されます。

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

次に、[]はStringに変換されます。

Thisはこのファイルのxfaです。このファイルで 'U72300DL1996PLC075672'を検索すると、ファイルが見つかりません。

これはすべてのフィールドを示すnormalファイルです。

すべてのアイデア?私はすべてを試しましたが、私の推測では、読者はその価値を見ることができるので、私は同様にできるはずです。

編集: ファイルをダウンロードする必要があります。ブラウザで表示できない場合があります。

答えて

3

異なる署名を適用する前にフォームが持っていたさまざまな状態を表すXFAコンテンツの複数のエントリがフォーム内にあります。あなたは

PDDocument.load(file)

を使用しているとしてPDFを順次解析され、最新のXFAコンテンツがピックアップされていません。あなたは

PDDocument.loadNonSeq(file,null)

に外部参照情報が使用され、最新のXFAは、あなたが探している情報を含む抽出されたことを変更した場合。

PDFBox 1.8.xの場合、仕様に沿って、つまり外部参照情報に従ってPDFを解析するには、常にPDDocument.loadNonSeqを使用する必要があります。 PDDocument.loadは、(Xref関連の)パーズエラーが発生したファイルを処理するために使用する必要があります。

PDFBox 2.xの場合、PDDocument.loadは、Xrefの後に解析します。つまり、1.8では「PDDocument.loadNonSeq」のように解析され、エラーがある場合は逐次解析が行われます。

+0

私は十分にありがとうございます。私は可能な限りすべてのことを試していたが、それは解析の誤りだと思った。代わりにファイルを保存してから解析していました。再度、感謝します!!乾杯!! – Mayank

関連する問題