2016-06-13 10 views
0

Wie extrahiert man angefügte Dateien aus einem PDF mit itext7?Wie man angehängte Dateien aus PDF mit itext7 extrahiert

Die Beispielcodes, die ich für itext5 gefunden habe, funktionieren nicht mehr.

A byte[] pro Datei wäre, was ich brauche, wie im itext5 Beispiel unten:

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/markus

Antwort

1

Sie sind statt durch Abfrage der Katalog für Anlagen mit Brute-Force-Suche nach eingebettete Dateien und Abfragen von Seitenwörterbüchern für Anhangsanmerkungen.

Wie auch immer, wenn ich Port würde Ihren Code zu iText 7, würde es so aussehen:

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(); 

Die einzige Änderung, die ich gemacht, ist, dass ich den Strom in eine Datei schreiben.

+0

Danke! Ich hatte einige der anderen Beispiele mit PdfCatalog/Dictionary ausprobiert, die ich bevorzugen würde, aber diese funktionierten auch nicht, also entschied ich mich für das oben genannte. – xormar