Mittwoch, 11. Februar 2015

Apache PDFBox - Probleme mit PDPageContentStream

Zur Bearbeitung von PDF-Dokumenten in einem Java-Projekt nutze ich Apache PDFBox. Das klappt recht gut, allerdings stößt man immer wieder auf Probleme, die aus der Verschiedenheit der PDF-Quellen resultieren.

Eine große Verbesserung brachte der Wechsel zur Version 2.0. Diese ist noch in Entwicklung aber hat zumindest für mich einige Probleme des 1.8er Releases gelöst.

Zwei Dinge blieben aber:

  1. Einfügen von Bildern in eine vorhandene Seite (PDImageXObject): Bei wenigen PDF-Dateien waren die Bilder einfach nicht sichtbar. Keine Fehlermeldung. Mit einem Texteditor konnte ich nachvollziehen, dass die Bilder in das PDF-Dokument eingefügt wurden.
  2. Eingefügter Text wurde teilweise in verschiedenen Breiten dargestellt drawString() bzw. showText(). Eine Prüfung mit Adobe Acrobat brachte ans Licht, dass die Textobjekte einen Faktor für die horizontale Verzerrung eingestellt hatten. Dieser war häufig entweder <1 (gestaucht) oder > 1 (gestreckt).

Durch Zufall bin ich dann auf einen wenig genannten Konstruktor der Klasse PDPageContentStream gestossen.

PDPageContentStream(PDDocument document, PDPage sourcePage,
     boolean appendContent, boolean compress,
     boolean resetContext)


Entscheidend ist der letzte Parameter resetContext. Dieser wird von den anderen Konstruktoren mit false belegt.

Durch Setzen des Parameters auf true konnte ich beide genannten Probleme lösen.

Keine Kommentare:

Kommentar veröffentlichen