2016-07-06 5 views
0

PDFBox API funktioniert gut für weniger Anzahl von Dateien. Aber ich muss 10000 pdf-Dateien zu einem verschmelzen, und wenn ich 10000 Akten (ungefähr 5gb) übergebe, nimmt es 5gb RAM und schließlich geht der Speicher aus. Gibt es eine Implementierung für solche Anforderungen in PDFBox? Ich habe versucht, es zu tunen, dass ich AutoClosedInputStream verwendet, die automatisch nach dem Lesen geschlossen wird, aber Ausgabe ist immer noch gleich.Wie 10000 pdf zu einem mit pdfbox in der effektivsten Art und Weise verschmelzen

Antwort

1

Ich habe ein ähnliches Szenario hier, aber ich muss nur 1000 Dokumente in einem einzigen zusammenführen.

Ich habe versucht, PDFMergerUtility Klasse zu verwenden, aber ich bekomme eine OutOfMemoryError. Also habe ich meinen Code überarbeitet, um das Dokument zu lesen, lade die erste Seite (meine Quelldokumente haben nur eine Seite) und füge dann statt PDFMergerUtility ein. Und jetzt funktioniert es gut, ohne OutOfMemoryError.

public void merge(final List<Path> sources, final Path target) { 
    final int firstPage = 0; 
    try (PDDocument doc = new PDDocument()) { 
     for (final Path source : sources) { 
      try (final PDDocument sdoc = PDDocument.load(source.toFile(), setupTempFileOnly())) { 
       final PDPage spage = sdoc.getPage(firstPage); 
       doc.importPage(spage); 
     } 
    } 

    doc.save(target.toAbsolutePath().toString()); 

} catch (final IOException e) { 
    throw new IllegalStateException(e); 
} 

}

Verwandte Themen