Blog

Vergleich von Apache FOP mit iText

Balaji D Loganathan

Aktualisiert Oktober 23, 2025
4 Minuten

Ein kurzer Vergleich zwischen Apache FOP und iText, insbesondere in Bezug auf die Verwendung für ein Java-basiertes Projekt. Ich habe auch einen kleinen Helloworld-Codeausschnitt von beiden hinzugefügt.

Was ist Apache Fop? Apache FOP (Formatting Objects Processor) ist ein Druckformatierer, der durch XSL-Formatierungsobjekte (XSL-FO) gesteuert wird. Vollständig in Java geschrieben. liest xsl:fo und rendert in Formate wie PDF, PS, PCL, AFP, XML (Area Tree Representation), Print, AWT und PNG und in geringerem Maße auch RTF und TXT. Was ist iText? iText ist eine Bibliothek, die es Ihnen ermöglicht, PDF-Dateien im laufenden Betrieb zu generieren. iText erweitert Web- und andere Anwendungen um die dynamische Generierung und/oder Bearbeitung von PDF-Dokumenten. Obwohl das primäre Ziel beider Anwendungen die Generierung von PDF-Dokumenten ist, handelt es sich um zwei völlig unterschiedliche Java-Bibliotheken. Nachfolgend finden Sie einen kurzen Vergleich, wann Sie welche verwenden sollten, Apache FOP

  • Wenn Sie eine feinkörnige Kontrolle über die Präsentation und das Layout der PDF-Datei haben möchten. Warum? FOP basiert auf dem MVC-Muster und verwendet die XSL:FO-Spezifikation
  • Wenn Ihre Eingabedaten stark auf XML basieren. Und warum? Das Hauptziel von Fop ist die Konvertierung von XML in PDF mit XSL:FO. Während iText über eine XML2PDF-Funktionalität verfügt, bietet FOP zusammen mit Xalan eine viel bessere Kontrolle über das Parsen des XML und das Rendern des PDF.
  • Wenn Sie neben PDF, RTF und HTML noch weitere Ausgabeformate wie PNG, SVG, TXT und so weiter unterstützen möchten.
  • Wenn Sie KEINE PDF-Datei erzeugen wollen, die in jedem Fall 1000+ Seiten enthält. Und warum? Apache FOP ist für seine langsame Verarbeitungsleistung bekannt. Es eignet sich nicht wirklich für Fälle, in denen Sie mehr als 1000 Seiten in sehr kurzer Zeit verarbeiten und erstellen müssen. .
  • Wenn Sie eine von außen konfigurierbare Kontrolle über das Ausgabeformat der PDF-Datei haben möchten. Und warum? Sie können das Stylesheet (xsl:fo oder xslt) aus Ihren Klassen oder Paketen heraushalten und FOP anweisen, dieses xsl:fo oder xslt beim Rendern von PDF zu verwenden
  • Wenn Sie eine barrierefreie PDF-Ansicht für alle Ihre Webseiten in einer Webanwendung haben möchten. Und warum? Besuchen Sie die Website https://xmlgraphics.apache.org/ und sehen Sie sich an, wie sie Apache Forrest mit Apache FOP integriert haben.

iText

  • Wenn Sie PDF-Dateien im Handumdrehen generieren und Unterstützung für Anmerkungen, AcroForms und digitale Signaturen hinzufügen möchten
  • Wenn Sie 100+ PDFs erstellen möchten, die auch 1000+ Seiten enthalten. Und warum? iText ist sehr zuverlässig bei der Verarbeitung und ziemlich schnell bei der Erstellung der PDFs.
  • Wenn Sie vorhandene PDF-Dokumente nachbearbeiten möchten, manipulieren Sie sie. Und warum? Denn selbst Apache FOP rechnet mit der Verwendung von iText für diesen Zweck
  • Wenn Sie Ihre PDF-Datei verschlüsseln möchten Und warum? Die iText-Bibliotheken sind dafür ziemlich gut geeignet
  • Wenn Sie beim Abrufen und Anzeigen der Datenbanktabellen auf dem Bildschirm (z.B. im Web oder in einer Client-Anwendung) Instanzunterstützung für XML-, PDF-, Excel- und CSV-Ausgaben haben möchten. Warum? Sehen Sie sich die Funktionen von DisplayTag an und erfahren Sie, wie es mit iText for PDF funktioniert

Wie ist es, ein einfaches HelloWorld-Text gedrucktes PDF-Dokument mit iText zu erstellen?

Dokument document = new Document();
PdfWriter.getInstance(document,
  new FileOutputStream("HelloWorld.pdf"));
document.open();
document.add(new Paragraph("Hello World"));
document.close();

Wie ist es, mit Apache FOP ein einfaches HelloWorld-Text-gedrucktes PDF-Dokument zu schreiben?

FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
OutputStream out = new java.io.FileOutputStream(pdffile);
out = new java.io.BufferedOutputStream(out);
  Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
  TransformerFactory factory = TransformerFactory.newInstance();
  Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltfileloc)));
  Quelle src = new StreamSource(new File(xmlfileloc));
  Ergebnis res = new SAXResult(fop.getDefaultHandler());
  transformer.transform(src, res);

Der Kürze halber habe ich die Code-Schnipsel für die Eingabe von xml und xslt (xsl:fo) nicht mit aufgenommen. Um den vollständigen Code zu sehen, klicken Sie auf FopSource/examples/.../.../ExampleXM2PDF.java Hinweis : Nun, die oben genannten Punkte beruhen auf meiner Erfahrung und Erfahrung, wenn Sie etwas Neues haben oder etwas falsch interpretiert sehen, dann schreiben Sie es bitte als Kommentar.

Verfasst von

Balaji D Loganathan

Working as a Senior Consultant at Xebia India IT Architects Private Limited, Gurgaon, India.

Contact

Let’s discuss how we can support your journey.