2016-06-13 31 views
0

itext7を使用してPDFから添付ファイルを抽出するにはどうすればよいですか?itext7でPDFから添付ファイルを抽出する方法

私がitext5で見つけたサンプルコードは、もう動作しません。

以下itext5の例のように、ファイルあたりbyte[]が、私は必要なもののようになります。あなたがのためにカタログを照会することにより、ブルートフォースを使用しての代わりに、添付ファイルを探している

PdfReader reader = new PdfReader(SRC); 
    Map<String, byte[]> files = new HashMap<String,byte[]>(); 
    PdfObject obj; 

    for (int i = 1; i <= reader.getXrefSize(); i++) { 
     obj = reader.getPdfObject(i); 
     if (obj != null && obj.isStream()) { 
      PRStream stream = (PRStream)obj; 
      byte[] b; 
      try { 
       b = PdfReader.getStreamBytes(stream); 
      } 
      catch(UnsupportedPdfException e) { 
       b = PdfReader.getStreamBytesRaw(stream); 
      } 
      files.put(Integer.toString(i), b); 
     } 
    } 

Thxを/マルクス

答えて

1

埋め込みファイルを検索し、添付ファイルアノテーションのページ辞書をクエリします。

私はiTextは7にポートコードをたい場合とにかく、それは次のようになります。私が作った

PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC)); 
PdfObject obj; 
for (int i = 1; i <= pdfDoc.getNumberOfPdfObjects(); i++) { 
    obj = pdfDoc.getPdfObject(i); 
    if (obj != null && obj.isStream()) { 
     byte[] b; 
     try { 
      b = ((PdfStream) obj).getBytes(); 
     } catch (PdfException exc) { 
      b = ((PdfStream) obj).getBytes(false); 
     } 
     FileOutputStream fos = new FileOutputStream(String.format(DEST, i)); 
     fos.write(b); 
     fos.close(); 
    } 
} 
pdfDoc.close(); 

唯一の変化は、私がファイルにストリームを書き込むことです。

+0

ありがとうございます!私はPdfCatalog/Dictionaryを使って他のいくつかの例を試してみましたが、これは好きですが、どちらもうまくいきませんでしたので、上記のように解決しました。 – xormar

関連する問題