VERGLEICH

FO.NET vs. IronPDF: Leitfaden für einen technischen Vergleich

Wenn .NET-Entwickler nach Lösungen zur PDF-Generierung suchen, sticht FO.NET als spezialisiertes Werkzeug zur Konvertierung von XSL-FO-Dokumenten in PDF hervor. Die Abhängigkeit von der veralteten XSL-FO-Sprache, die fehlende HTML/CSS-Unterstützung und der eingestellte Wartungsstatus veranlassen jedoch viele Teams, Alternativen in Betracht zu ziehen.IronPDFbietet eine moderne Lösung unter Verwendung der HTML/CSS-Webstandards, mit denen die meisten Entwickler bereits vertraut sind, mit einer Chromium-Rendering-Engine und regelmäßigen monatlichen Updates.

Dieser Vergleich untersucht beide Bibliotheken hinsichtlich relevanter technischer Aspekte, um professionelle Entwickler und Architekten bei der Entscheidungsfindung für ihre .NET PDF-Anforderungen zu unterstützen.

Fo.NET verstehen

FO.NET (auch bekannt als FoNet) ist eine Open-Source-Bibliothek, die für die Konvertierung von XSL Formatting Object (XSL-FO)-Dokumenten in PDFs mit C# entwickelt wurde. Die Bibliothek arbeitet unter der Apache 2.0-Lizenz und bildet die XSL-FO-Sprache direkt auf das PDF-Format ab.

FO.NET verwendet FonetDriver als primäre Klasse, wobei die Make()-Fabrikmethode Treiberinstanzen erzeugt und Render()-Methoden XSL-FO-Eingabeströme verarbeiten, um PDF-Ausgabeströme zu erzeugen. Die Konfiguration erfolgt im XSL-FO-Markup selbst mit Elementen wie fo:simple-page-master, fo:layout-master-set und Formatierungsattributen für Ränder, Seitengrößen und Schriftarten.

Eine wesentliche Einschränkung besteht darin, dass FO.NET Kenntnisse in XSL-FO erfordert – einer XML-basierten Sprache, die eine W3C-Spezifikation aus dem Jahr 2001 ist und seit 2006 nicht mehr aktualisiert wurde. Die Bibliothek unterstützt weder HTML noch CSS und kann Webseiten nicht direkt rendern. XSL-FO gilt im heutigen Technologiebereich weitgehend als veraltet; weniger als 1 % der Entwickler verfügen über Fachkenntnisse darin, verglichen mit über 98 %, die HTML/CSS beherrschen.

Das ursprüngliche CodePlex-Repository gibt es nicht mehr, und die GitHub-Forks werden nicht mehr aktiv gepflegt. FO.NET hat interne Abhängigkeiten von System.Drawing, die verhindern, dass es unter Linux/MacOS funktioniert, was es auf den Einsatz unter Windows beschränkt.

IronPDFverstehen

IronPDF ist eine .NET PDF-Bibliothek, die HTML/CSS für die Dokumentgestaltung und das Layout verwendet und dabei gängige Webstandards der Entwicklung nutzt. Die Bibliothek verwendet eine Chromium-Rendering-Engine und bietet vollständige CSS3-Unterstützung, einschließlich Flexbox- und Grid-Layouts, sowie JavaScript-Ausführung.

IronPDF verwendet ChromePdfRenderer als primäre Rendering-Klasse, wobei RenderingOptions eine programmatische Konfiguration für Seitengröße, Ränder, Kopf- und Fußzeilen und andere PDF-Einstellungen bietet. Die Bibliothek unterstützt das direkte Rendering von URLs, HTML-Strings und HTML-Dateien und erzeugt PdfDocument-Objekte, die gespeichert, zusammengeführt, gesichert oder weiter bearbeitet werden können.

IronPDF wird aktiv weiterentwickelt und monatlich aktualisiert, unterstützt echte plattformübergreifende Bereitstellung (Windows, Linux, macOS) und bietet eine umfassende Dokumentation sowie Tutorials.

Architektur- und Technologievergleich

Der grundlegende Unterschied zwischen diesen .NET-PDF-Bibliotheken liegt in ihrem Eingabeformat und ihrer technologischen Grundlage.

Aspekt FO.NET IronPDF
Eingabeformat XSL-FO (veraltetes XML) HTML/CSS (moderne Webstandards)
Lernkurve Steep (XSL-FO-Kenntnisse) Sanft (HTML/CSS-Kenntnisse)
Wartung Aufgegeben Monatlich aktiv gepflegt
Windows, Linux, macOS, Docker, Azure, AWS. Nur für Windows Echt plattformübergreifend
CSS-Unterstützung Keine Vollständiges CSS3 (Flexbox, Grid)
JavaScript Keine Volle JavaScript-Unterstützung
URL-Rendering Nicht unterstützt Eingebaut
Moderne Funktionen Beschränkt Kopfzeilen, Fußzeilen, Wasserzeichen, Sicherheit
Dokumentation Veraltet Umfassende Tutorials

FO.NET wurde entwickelt, als erwartet wurde, dass XSL-FO ein Standard für die Dokumentenformatierung werden würde. Das ist nicht geschehen - HTML/CSS wurde zum universellen Dokumentenformat. Die meisten XSL-FO-Ressourcen stammen aus den Jahren 2005-2010, was es zunehmend schwieriger macht, aktuelle Informationen oder Unterstützung durch die Community zu finden.

Code-Vergleich: Gängige PDF-Operationen

HTML-zu-PDF-Konvertierung

Die grundlegendste Operation verdeutlicht den Modellunterschied zwischen XSL-FO- und HTML-Ansätzen.

FO.NET:

// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;
using System.Xml;

class Program
{
    static void Main()
    {
        // FoNet requires XSL-FO format, not HTML
        // First convert HTML to XSL-FO (manual process)
        string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
            <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name='page'>
                        <fo:region-body/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference='page'>
                    <fo:flow flow-name='xsl-region-body'>
                        <fo:block>Hello World</fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>";

        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("output.pdf", FileMode.Create));
    }
}
// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;
using System.Xml;

class Program
{
    static void Main()
    {
        // FoNet requires XSL-FO format, not HTML
        // First convert HTML to XSL-FO (manual process)
        string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
            <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name='page'>
                        <fo:region-body/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference='page'>
                    <fo:flow flow-name='xsl-region-body'>
                        <fo:block>Hello World</fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>";

        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("output.pdf", FileMode.Create));
    }
}
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is HTML content.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Der Kontrast ist deutlich. FO.NET erfordert eine ausführliche XSL-FO-Auszeichnung mit XML-Namensraumdeklarationen, fo:root, fo:layout-master-set, fo:simple-page-master, fo:page-sequence, fo:flow und fo:block Elementen - und das alles, bevor ein einfacher "Hello World"-Text erzeugt wird. Der Code-Kommentar weist ausdrücklich darauf hin: "FoNet erfordert das XSL-FO-Format, nicht HTML."

IronPDF erstellt einen Renderer, übergibt Standard-HTML, rendert in PDF und speichert einfache Zeilen mit einer Syntax, die Entwickler bereits kennen.

Für fortgeschrittene HTML-Rendering-Optionen lesen Sie bitte den Leitfaden zur Konvertierung von HTML in PDF.

URL zu PDF-Konvertierung

Die Konvertierung von Webseiten in das PDF-Format offenbart eine kritische Fähigkeitslücke.

FO.NET:

// NuGet: Install-Package Fonet
using Fonet;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        // FoNet does not support URL rendering directly
        // Must manually download, convert HTML to XSL-FO, then render
        string url = "https://example.com";
        string html = new WebClient().DownloadString(url);

        // Manual conversion from HTML to XSL-FO required (complex)
        string xslFo = ConvertHtmlToXslFo(html); // Not built-in

        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("webpage.pdf", FileMode.Create));
    }

    static string ConvertHtmlToXslFo(string html)
    {
        // Custom implementation required
        throw new System.NotImplementedException();
    }
}
// NuGet: Install-Package Fonet
using Fonet;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        // FoNet does not support URL rendering directly
        // Must manually download, convert HTML to XSL-FO, then render
        string url = "https://example.com";
        string html = new WebClient().DownloadString(url);

        // Manual conversion from HTML to XSL-FO required (complex)
        string xslFo = ConvertHtmlToXslFo(html); // Not built-in

        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("webpage.pdf", FileMode.Create));
    }

    static string ConvertHtmlToXslFo(string html)
    {
        // Custom implementation required
        throw new System.NotImplementedException();
    }
}
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

FO.NET unterstützt ausdrücklich keine URL-Wiedergabe. Die Code-Kommentare besagen: "FoNet unterstützt keine direkte URL-Wiedergabe" und "Manuelle Konvertierung von HTML nach XSL-FO erforderlich (komplex)." Die Methode ConvertHtmlToXslFo() löst eine NotImplementedException aus, weil diese Umwandlung nicht eingebaut ist und eine eigene Implementierung erfordern würde.

IronPDF bietet eine native RenderUrlAsPdf()-Funktionalität, die das Abrufen von URLs, die Ausführung von JavaScriptund das Rendern in einem einzigen Methodenaufruf erledigt - drei Zeilen Code im Gegensatz zu einem komplexen, nicht implementierten Workflow.

Weitere Informationen zum URL-Rendering finden Sie in der URL to PDF-Dokumentation.

PDF mit benutzerdefinierten Einstellungen

Die Konfiguration von Seitenabmessungen und -rändern demonstriert die Unterschiede im Konfigurationsansatz.

FO.NET:

// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        // FoNet settings are configured in XSL-FO markup
        string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
            <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name='A4' 
                        page-height='297mm' page-width='210mm'
                        margin-top='20mm' margin-bottom='20mm'
                        margin-left='25mm' margin-right='25mm'>
                        <fo:region-body/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference='A4'>
                    <fo:flow flow-name='xsl-region-body'>
                        <fo:block font-size='14pt'>Custom PDF</fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>";

        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("custom.pdf", FileMode.Create));
    }
}
// NuGet: Install-Package Fonet
using Fonet;
using Fonet.Render.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        // FoNet settings are configured in XSL-FO markup
        string xslFo = @"<?xml version='1.0' encoding='utf-8'?>
            <fo:root xmlns:fo='http://www.w3.org/1999/XSL/Format'>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name='A4' 
                        page-height='297mm' page-width='210mm'
                        margin-top='20mm' margin-bottom='20mm'
                        margin-left='25mm' margin-right='25mm'>
                        <fo:region-body/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference='A4'>
                    <fo:flow flow-name='xsl-region-body'>
                        <fo:block font-size='14pt'>Custom PDF</fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>";

        FonetDriver driver = FonetDriver.Make();
        driver.Render(new StringReader(xslFo), 
            new FileStream("custom.pdf", FileMode.Create));
    }
}
$vbLabelText   $csharpLabel

IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 25;
        renderer.RenderingOptions.MarginRight = 25;

        string html = "<h1 style='font-size:14pt'>Custom PDF</h1>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Engines.Chrome;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 25;
        renderer.RenderingOptions.MarginRight = 25;

        string html = "<h1 style='font-size:14pt'>Custom PDF</h1>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}
$vbLabelText   $csharpLabel

Der Code-Kommentar in FO.NET besagt ausdrücklich: "FoNet-Einstellungen werden in XSL-FO-Markup konfiguriert." Seitengröße, Ränder und Formatierung sind als Attribute auf fo:simple-page-master in die XML-Struktur eingebettet. Das bedeutet, dass die Konfiguration mit dem Inhalt in einem ausführlichen XML-Format verwoben ist.

IronPDF trennt die Konfiguration vom Inhalt durch programmatische RenderingOptions-Eigenschaften. Einstellungen wie PaperSize, MarginTop, MarginBottom, MarginLeftund MarginRightwerden im Renderer-Objekt festgelegt, während der Inhalt reines HTML bleibt.

API-Mapping-Referenz

Für Entwickler, die eine FO.NET-Migration evaluieren oder Funktionen vergleichen möchten, zeigt dieses Mapping gleichwertige Operationen:

Kernklassen-Zuordnung

FO.NET IronPDF
FonetDriver.Make() new ChromePdfRenderer()
driver.Render(inputStream, outputStream) renderer.RenderHtmlAsPdf(html)
driver.Render(inputFile, outputStream) renderer.RenderHtmlFileAsPdf(path)
driver.BaseDirectory RenderingOptions.BaseUrl
driver.OnError += handler Try/catch um rendern

XSL-FO zu RenderingOptions Mapping

XSL-FO-Attribut IronPDFRenderingOptionen
Seiten-Höhe/Seiten-Breite Papiergröße
margin-top MarginTop
Rand-unten MarginBottom
Margin-left MarginLeft
margin-right MarginRight
Referenz-Orientierung Papierausrichtung

XSL-FO-Elemente zu HTML-Zuordnung

XSL-FO-Element HTML-Äquivalent
<fo:root> <html>
<fo:layout-master-set> CSS @page-Regel
<fo:simple-page-master> CSS @page
<fo:page-sequence> <body> oder <div>
<fo:flow> <main> oder <div>
<fo:static-content> HtmlHeaderFooter
<fo:block> <p>, <div>, <h1>-<h6>
<fo:table> <table>
<fo:list-block> <ul>, <ol>
<fo:external-graphic> <img>
<fo:page-number/> {Seite} Platzhalter

Zusammenfassung des Funktionsvergleichs

Feature FO.NET IronPDF
HTML zu PDF (erfordert manuelle XSL-FO-Konvertierung)
URL zu PDF ❌(nicht unterstützt)
XSL-FO zu PDF Nicht anwendbar
CSS3-Unterstützung ✅(Flexbox, Grid)
JavaScript
Kopf-/Fußzeilen XSL-FO statischer Inhalt HTML-basiert
Seitennummerierung fo:page-number {Seite} Platzhalter
Plattformübergreifend ❌(nur Windows)
Aktive Wartung ❌(aufgegeben) ✅(monatlich)

Wenn Teams den Wechsel von FO.NET zuIronPDFerwägen

Entwicklungsteams erwägen den Übergang von FO.NET zuIronPDFaus mehreren Gründen:

Veraltete Technologie: XSL-FO ist eine W3C-Spezifikation aus dem Jahr 2001, die seit 2006 keine Aktualisierungen mehr erfahren hat und weitgehend als veraltet gilt. Die meisten Ressourcen und Dokumentationen stammen aus den Jahren 2005-2010, was es zunehmend schwieriger macht, aktuelle Informationen zu finden oder Entwickler mit XSL-FO-Kenntnissen einzustellen.

Steile Lernkurve: XSL-FO erfordert das Erlernen komplexer XML-basierter Auszeichnungssprachen mit spezialisierten Formatierungsobjekten ( fo:block , fo:table , fo:page-sequence usw.). Weniger als 1 % der Entwickler kennen XSL-FO, im Vergleich zu über 98 %, die HTML/CSS beherrschen.

Keine HTML/CSS-Unterstützung: FO.NET kann weder HTML noch CSS rendern – es erfordert eine manuelle Konvertierung von HTML in XSL-FO-Markup, die nicht in die Bibliothek integriert ist. Teams mit Webinhalten oder HTML-Vorlagen müssen eine eigene Konvertierungslogik implementieren.

Vernachlässigte Wartung: Das ursprüngliche CodePlex-Repository existiert nicht mehr, und die GitHub-Forks werden nicht mehr aktiv gepflegt. Sicherheitspatches, Fehlerbehebungen und neue Funktionen werden nicht entwickelt.

Plattformbeschränkungen: FO.NET hat interne Abhängigkeiten von System.Drawing, die die Funktionsfähigkeit unter Linux/macOS verhindern und den Einsatz auf reine Windows-Umgebungen beschränken. Moderne Anwendungen erfordern zunehmend eine plattformübergreifende Bereitstellung.

Fehlende moderne Funktionen: Keine JavaScript-Unterstützung, keine CSS3-Funktionen (Flexbox, Grid), keine modernen Webfonts und keine Möglichkeit zum direkten URL-Rendering.

Stärken und Überlegungen

FO.NET Stärken

  • Direkte XSL-FO-Konvertierung: Speziell optimiert für die Konvertierung von XSL-FO in PDF.
  • Open Source: Apache-2.0-Lizenz – frei zur Nutzung, Änderung und Verbreitung
  • Präzise Kontrolle: XSL-FO bietet detaillierte Kontrolle über das Dokumentenlayout

FO.NET Überlegungen

  • Veraltete Technologie: Die XSL-FO-Spezifikation wurde seit 2006 nicht mehr aktualisiert.
  • Erfordert XSL-FO-Kenntnisse: Weniger als 1 % der Entwickler verfügen über entsprechende Fachkenntnisse.
  • Keine HTML-Unterstützung: HTML- oder CSS-Inhalte können nicht gerendert werden.
  • Verlassen: Keine aktiven Wartungs- oder Sicherheitsupdates
  • Nur für Windows: Abhängigkeiten von System.Drawing verhindern plattformübergreifende Nutzung
  • Keine URL-Darstellung: Webseiten können nicht direkt konvertiert werden
  • Eingeschränkte Dokumentation: Die Ressourcen sind veraltet

IronPDFStärken

  • HTML/CSS-Standard: Nutzt Webtechnologien, die über 98 % der Entwickler bereits kennen.
  • Modernes Rendering: Chromium-Engine mit vollständiger CSS3- und JavaScript-Unterstützung
  • Aktive Weiterentwicklung: Monatliche Releases mit neuen Funktionen und Sicherheitspatches
  • Plattformübergreifend: Vollständige Unterstützung für Windows, Linux und macOS
  • Direktes URL-Rendering: Native RenderUrlAsPdf() Funktion
  • Professionelle Funktionen: Kopf- und Fußzeilen, Wasserzeichen, Sicherheit – alles integriert
  • Umfassende Ressourcen: Ausführliche Tutorials und Dokumentation

IronPDFÜberlegungen

  • Kommerzielle Lizenz: Für die Produktionsnutzung ist eine Lizenz erforderlich.
  • Anderes Paradigma: XSL-FO-Vorlagen müssen in HTML konvertiert werden.

Abschluss

FO.NET undIronPDFstellen grundlegend unterschiedliche Ansätze für die PDF-Erzeugung in .NET dar. FO.NET bedient den Nischenanwendungsfall der XSL-FO-zu-PDF-Konvertierung, aber seine Abhängigkeit von veralteter Technologie, die aufgegebene Wartung, die Beschränkung auf Windows und die fehlende HTML-Unterstützung machen es zunehmend schwierig, es für neue Projekte zu rechtfertigen.

IronPDF bietet einen modernen Ansatz unter Verwendung von HTML/CSS-Webstandards, der sich an den aktuellen Fähigkeiten und Technologien der Entwickler orientiert. Die Fähigkeit, HTML und URLs direkt zu rendern und CSS3 mit einer Chromium-Engine zu verwenden, macht es für die heutigen Anforderungen an die PDF-Erstellung geeignet.

Da Unternehmen für .NET 10, C# 14 und die Anwendungsentwicklung bis 2026 planen, ist die technologische Grundlage wichtig. Teams, die alte XSL-FO-Systeme pflegen, können weiterhin FO.NET verwenden, aber der Weg zur modernen PDF-Erzeugung führt eindeutig über HTML-basierte Lösungen wie IronPDF, die das vorhandene Fachwissen in der Webentwicklung nutzen.

Testen SieIronPDFmit einer kostenlosen Testversion und lesen Sie die umfassende Dokumentation, um die Eignung für Ihre spezifischen Anforderungen zu prüfen.