2016-06-02 8 views
3

Ich muss zwei PDF-Dateien mit PdfBox von Apache zusammenführen. Ich habe dazu physische PDF-Dateien genommen. Unten ist der Code:Pdf-Dateien mit PDFBox verschmelzen

PDFMergerUtility ut = new PDFMergerUtility(); 
ut.addSource(path1); 
ut.addSource(path2); 
ut.setDestinationFileName(path3); 
ut.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly()); 

Dateien sind perfekt verschmolzen dann aber einige Einschränkungen haben, wie unten:

  1. I 1. Datei im Code erschaffe selbst, so ist es PDDocument Objekt.
  2. Die Datei, die ich mit 1. Datei zusammenführen muss, ist im Byte-Array-Format.
  3. Ich muss die zusammengeführten Dateien nicht speichern, sondern muss sie als Byte-Array konvertieren.

Bitte jemand helfen mir diese Anforderung zu erreichen.

Antwort

3

Rufen Sie PDFMergerUtility.appendDocument(PDDocument destination, PDDocument source) statt Merge. Um von einem Byte-Array zu laden, rufen Sie PDDocument.load(array).

Btw: Ich würde entmutigen PDDocument Objekte verschmelzen, die Sie selbst erstellt haben, nicht diese, wenn Sie Schriftuntergruppen (siehe Ausgabe PDFBOX-3243). Speichern Sie sie besser (z. B. in einem ByteArrayOutputStream) und neu laden und dann zusammenführen. Um ein Byte-Array von einem ByteArrayOutputStream zu erhalten, verwenden Sie ByteArrayOutputStream.tobytearray().

+0

Haben Sie ein Beispiel für den Ansatz "ByteArrayOutputStream"? Ich habe versucht, zwei Dokumente in zwei Streams zu speichern, die Arrays kombiniert und die kombinierten Bytes in ein neues Dokument neu geladen. Es schien jedoch nicht zu funktionieren. – Trinimon

+1

'ByteArrayOutputStream baos = neues ByteArrayOutputStream(); doc.save (baos); doc.close(); doc = PDDocument.load (baos.toByteArray()); ' –

+0

Sie wollten also das selbst erstellte' PDDocument' speichern und neu laden? ... und in Ihrem Kommentar ging es nicht um das Zusammenführen von Dokumenten durch die Kombination von ByteArrayOutputStream's. Recht? – Trinimon