PDFs mit Java erstellen und bearbeiten
Java-Akrobatik
von Bernhard Bablok
Erschienen im Linux-Magazin
2004/11
PDF-Dateien selbst schreiben ist mit freier Software kein Problem. Wer mit Java ein PDF erzeugen möchte, muss nicht mal zu externen Programmen greifen: Das freie Projekt I-Text bietet alles, was dafür notwendig ist. Die neueste Version unterstützt auch XML-Formate.
Der Erfolg des PDF-Formats hat zwei Gründe: Zum einen gab es immer kostenlose Acrobat Reader, zum anderen bietet das Format einige Vorteile: Hyperlinks, eingebettete Bilder, Formularverarbeitung, Metadaten, Verschlüsselung und gute Drucktreue der Dokumente. Das Projekt I-Text[1] des Belgiers Bruno Lowagie stellt ein Java-API für die Erzeugung von PDF-Dateien bereit. Es handelt sich um eine Bibliothek, nicht um ein Satz- oder Layoutsystem.
Damit eignet es sich für die programmgesteuerte Ausgabe von strukturierten Daten, weniger als Allroundwerkzeug für PDF-Dateien. Wer volle Kontrolle über die Ausgabe haben möchte, wird mit I-Text zwar Erfolg haben, aber nicht unbedingt glücklich werden. Dieser Coffee-Shop führt das I-Text-API anhand einfacher Beispiele ein. Wer tiefer einsteigen will, kommt nicht darum herum, das recht gute Tutorial zu studieren. Außerdem gibt es verschiedene Tutorials zu I-Text ([2], [3]), die sich zum Beispiel damit beschäftigen, wie man mit Servlets PDF-Dateien erzeugt.
Download und Installation
Das I-Text-Paket an sich ist relativ kompakt (705 KByte Quellen). Die Bibliothek besteht aus zwei Jar-Dateien (»itext-1.02b.jar« und »iTextHYPH.jar«) mit zusammen 1,1 MByte. Wer die Javadoc-Dokumentation nicht selbst generieren möchte, findet die fertigen HTML-Seiten (1,2 MByte) ebenfalls online. Weiterhin ist ein Paket mit dem Tutorial (91 KByte) und den zugehörigen Beispielen (1,7 MByte) verfügbar. All dies gibt es auf der Homepage[1] des I-Text-Projekts (wobei die eigentlichen Dateien auf Sourceforge liegen). Dort findet sich auch eine experimentelle XML-Unterstützung. Ein praktisches All-in-one-Paket fehlt leider.
Die Installation ist denkbar einfach: Die Jar-Dateien gehören in den »CLASSPATH« der Anwendung. Bei der Installation des Tutorials muss man etwas Acht geben, sonst stimmen die relativen Links nicht:
mkdir -p /usr/local/iText/tutorial
mkdir -p /usr/local/iText/examples
tar -xvzf itext-tutorial-0.94.tar.gz -C /usr/local/iText/tutorial
tar -xvzf itext-examples.tar.gz -C /usr/local/iText/examples
Für Selbstkompilierer ist allerdings Handarbeit angesagt, da das Paket weder Makefile noch Ant-Datei enthält. Die erforderlichen Schritte zeigt Listing 1. Alternativ findet sich ein Ant-Buildfile »build.xml« auf der Projekt-Homepage. Damit lässt sich sogar der Code herunterladen:
ant download.site
Jar-Files erzeugt man mit »ant jar« respektive »ant jarWithXML« für die Version mit XML-Unterstützung. Das I-Text-Paket steht unter einer dualen Lizenz: Zur Wahl stehen die LGPL oder die Mozilla Public License.
Listing 1: I-Text selbst bauen
|
01 mkdir -p /tmp/iText/src
02 mkdir -p /tmp/iText/build
03 tar -xvzf itext-src-1.02b.tar.gz -C /tmp/iText/src
04 cd /tmp/iText
05 javac -d build `find src -type f -name *.java`
06 cd src
07 find . -name *.afm -exec cp -v --parents {} ../build ;
08 cd ..
09 jar -cf itext.jar -C build .
|
Hello World
Den Einstieg in die I-Text-Programmierung verschafft ein erweitertes Hello-World-Beispiel, siehe Listing 2. Das Programm liest von der Standardeingabe und übergibt den daraus erzeugten String an I-Text. Wer zum Beispiel per Pipe das GPL-Dokument ins Programm schreibt, erhält das in Abbildung 1 dargestellte Ergebnis.
Listing 2: »SimplePdf.java«
|
22 import java.io.*;
23
24 import com.lowagie.text.*;
25 import com.lowagie.text.pdf.*;
26
34 public class SimplePdf {
35
38 public static void main(String[] args) {
39 try {
40 SimplePdf pdf = new SimplePdf();
41 Document document = new Document();
42 PdfWriter.getInstance(document,new FileOutputStream("SimplePdf.pdf"));
43 document.open();
44 document.add(new Paragraph(pdf.getLines()));
45 document.close();
46 } catch (Exception e) {
47 e.printStackTrace();
48 }
49 }
50
51 /////////////////////////////////////////////////////
52
57 private String getLines() throws IOException {
58 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
59 StringBuffer result = new StringBuffer();
60 String line;
61 while((line = reader.readLine()) != null)
62 result.append(line).append("n");
63 return result.toString();
64 }
65 }
|

|
Abbildung 1: Das Programm aus Listing 2 zeigt den GPL-Wortlaut im PDF-Format.
|
Vom notwendigen Drumherum einmal abgesehen passiert das Interessante in den Zeilen 41 bis 45. Etwas ungewöhnlich und erklärungsbedürftig ist dabei die Zeile 42. Dieser Methodenaufruf verknüpft das Dokument mit einer »PdfWriter«-Instanz. Eine »Document.addWriter()«- oder »PdfWriter.setDocument()«-Methode wäre klarer.
Für die wenigen Codezeilen sieht das Ergebnis schon ganz passabel aus. Wie es sich noch verfeinern lässt, zeigen die folgenden Beispiele.
| Whitepaper |
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
|
Daten Migration - Eine Publikation von Bloor Research
Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|
Gosch Andreas,
28.09.2011 10:58