2016-06-13 303 views
0

如何使用itext7從PDF中提取附加文件?如何使用itext7從PDF中提取附加文件

我發現的itext5的示例代碼都不再工作。

一個byte[]每個文件將是我所需要的,如下面的itext5例如:

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