COMPARAISON

FO.NET vs IronPDF for .NET : Guide de comparaison technique

Lorsque les développeurs .NET recherchent des solutions de génération de PDF, FO.NET se distingue comme un outil spécialisé pour la conversion de documents XSL-FO en PDF. Cependant, sa dépendance au langage XSL-FO obsolète, l'absence de prise en charge HTML/CSS et l'arrêt de sa maintenance incitent de nombreuses équipes à envisager des alternatives.IronPDFoffre une solution moderne utilisant les standards web HTML/CSS que la plupart des développeurs connaissent déjà, avec un moteur de rendu Chromium et des mises à jour mensuelles régulières.

Cette comparaison examine les deux bibliothèques sous différents angles techniques pertinents afin d'aider les développeurs et architectes professionnels à prendre des décisions éclairées concernant leurs besoins en matière de PDF .NET.

Comprendre FO.NET

FO.NET (également connu sous le nom de FoNet) est une bibliothèque open-source conçue pour convertir des documents XSL Formatting Object (XSL-FO) en PDF à l'aide de C#. La bibliothèque fonctionne sous la licence Apache 2.0 et convertit directement le langage XSL-FO au format PDF.

FO.NET utilise FonetDriver comme classe principale, avec la méthode d'usine Make() créant des instances de pilote et les méthodes Render() traitant les flux d'entrée XSL-FO pour produire des flux de sortie PDF. La configuration s'effectue dans le balisage XSL-FO lui-même à l'aide d'éléments tels que fo:simple-page-master, fo:layout-master-set, et d'attributs de formatage pour les marges, les tailles de page et les polices de caractères.

Une limitation importante est que FO.NET nécessite une connaissance de XSL-FO, un langage basé sur XML qui est une spécification du W3C datant de 2001 et qui n'a pas été mise à jour depuis 2006. La bibliothèque ne prend pas en charge HTML ou CSS et ne peut pas afficher directement des pages Web. XSL-FO est largement considéré comme obsolète dans le domaine technologique actuel, avec moins de 1 % des développeurs possédant une expertise en la matière, contre plus de 98 % qui connaissent HTML/CSS.

Le dépôt CodePlex original n'existe plus et les forks GitHub ne sont plus activement maintenus. FO.NET a des dépendances internes avec System.Drawing qui l'empêchent de fonctionner sous Linux/macOS, ce qui le limite à un déploiement sous Windows uniquement.

Comprendre IronPDF

IronPDF est une bibliothèque PDF .NET qui utilise HTML/CSS pour la mise en forme et la mise en page des documents, en utilisant des standards web couramment utilisés en développement. La bibliothèque utilise un moteur de rendu Chromium, offrant une prise en charge CSS3 complète, y compris les mises en page Flexbox et Grid, ainsi que l'exécution JavaScript.

IronPDF utilise ChromePdfRenderer comme classe de rendu principale, avec RenderingOptions fournissant une configuration programmatique pour la taille des pages, les marges, les en-têtes, les pieds de page et d'autres paramètres PDF. La bibliothèque prend en charge le rendu direct des URL, le rendu des chaînes HTML et le rendu des fichiers HTML, produisant des objets PdfDocument qui peuvent être enregistrés, fusionnés, sécurisés ou manipulés.

IronPDF bénéficie d'une maintenance active avec des mises à jour mensuelles, prend en charge un véritable déploiement multiplateforme (Windows, Linux, macOS) et fournit une documentation et des tutoriels complets.

Architecture et comparaison des technologies

La différence fondamentale entre ces bibliothèques PDF .NET réside dans leur format d'entrée et leur base technologique.

Aspect FO.NET IronPDF
Format de saisie XSL-FO (XML obsolète) HTML/CSS (normes web modernes)
Courbe d'apprentissage Steep (expertise XSL-FO) Douceur (connaissances en HTML/CSS)
Maintenance Abandonné Maintenance mensuelle active
Support de la plateforme Windows uniquement Véritablement multiplateforme
Support CSS Aucun CSS3 complet (Flexbox, Grid)
JavaScript Aucun Prise en charge complète de JavaScript
Rendu d'URL Non pris en charge Intégré
Fonctionnalités modernes Limité En-têtes, pieds de page, filigranes, sécurité
Documentation Obsolète Tutoriels complets

FO.NET a été conçu à l'époque où l'on s'attendait à ce que XSL-FO devienne une norme pour la mise en forme des documents. Cela ne s'est pas produit : le format HTML/CSS est devenu le format de document universel. La plupart des ressources XSL-FO datent de 2005-2010, ce qui rend de plus en plus difficile la recherche d'informations à jour ou le soutien de la communauté.

Code Comparaison : Opérations PDF courantes

Conversion HTML en PDF

L'opération la plus fondamentale illustre la différence de modèle entre les approches XSL-FO et HTML.

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

Le contraste est évident. FO.NET nécessite un balisage XSL-FO verbeux avec des déclarations d'espace de noms XML, des éléments fo:root, fo:layout-master-set, fo:simple-page-master, fo:page-sequence, fo:flow, et fo:block - tout cela avant de produire un simple texte "Hello World". Le commentaire du code indique explicitement : "FoNet requiert le format XSL-FO, pas HTML"

IronPDF crée un moteur de rendu, passe du HTML standard, effectue le rendu en PDF et sauvegarde quatre lignes simples à l'aide d'une syntaxe que les développeurs connaissent déjà.

Pour des options de rendu HTML avancées, explorez le guide de conversion du HTML en PDF.

Conversion d'URL en PDF

La conversion de pages web en PDF révèle une lacune critique en matière de capacités.

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 ne prend explicitement pas en charge le rendu des URL. Les commentaires du code indiquent : "FoNet ne prend pas en charge directement le rendu des URL" et "Une conversion manuelle de HTML à XSL-FO est nécessaire (complexe)" La méthode ConvertHtmlToXslFo() lance NotImplementedException car cette conversion n'est pas intégrée et nécessiterait une implémentation personnalisée.

IronPDF fournit une fonctionnalité native RenderUrlAsPdf() qui gère la récupération de l'URL, l'exécution du JavaScriptet le rendu en un seul appel de méthode - trois lignes de code par rapport à un flux de travail complexe et non mis en œuvre.

Pour en savoir plus sur le rendu des URL, consultez la documentation sur les URL au format PDF.

PDF avec paramètres personnalisés

La configuration des dimensions et des marges des pages illustre les différences d'approche en matière de configuration.

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

Le commentaire de code dans FO.NET indique explicitement : "Les paramètres de FoNet sont configurés dans le balisage XSL-FO La taille des pages, les marges et le formatage sont intégrés dans la structure XML en tant qu'attributs de fo:simple-page-master. Cela signifie que la configuration est entrelacée avec le contenu dans un format XML verbeux.

IronPDF sépare la configuration du contenu à l'aide de propriétés RenderingOptions programmatiques. Des paramètres tels que PaperSize, MarginTop, MarginBottom, MarginLeftet MarginRightsont définis sur l'objet de rendu, tandis que le contenu reste du HTML propre.

Référence de mappage d'API

Pour les développeurs qui évaluent la migration vers FO.NET ou qui comparent les capacités, cette correspondance montre les opérations équivalentes :

Mappage des classes de base

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 autour du rendu

Mappage XSL-FO vers RenderingOptions

Attribut XSL-FO Options de rendu IronPDF
hauteur de la page/largeur de la page Taille du papier
margin-top MarginTop
margin-bottom MarginBottom
marge-gauche MarginLeft
margin-right MarginRight
référence-orientation Orientation du papier

Mappage d'éléments XSL-FO en HTML

Élément XSL-FO Équivalent HTML
<fo:root> <html>
<fo:layout-master-set> Règle @page CSS
<fo:simple-page-master> CSS @page
<fo:page-séquence> <body> ou <div>
<fo:flow> <main> ou <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-numéro/> {page} placeholder

Résumé de la comparaison des fonctionnalités

Fonction FO.NET IronPDF
HTML vers PDF ❌(nécessite une conversion XSL-FO manuelle)
URL vers PDF ❌(non pris en charge)
XSL-FO vers PDF N/A
Prise en charge CSS3 ✅(Flexbox, Grid)
JavaScript
En-têtes/Pieds de page XSL-FO contenu statique Basé sur HTML
Numérotation des pages fo:page-number {page} placeholder
Multiplateforme ❌(Windows uniquement)
Maintenance active ❌(abandonné) ✅(mensuel)

Quand les équipes envisagent de passer d'IronPDF for .NET à IronPDF

Les équipes de développement évaluent le passage d'IronPDF .NET àIronPDFpour plusieurs raisons :

Technologie obsolète : XSL-FO est une spécification du W3C datant de 2001 qui n'a pas été mise à jour depuis 2006 et qui est largement considérée comme obsolète. La plupart des ressources et de la documentation datent de 2005-2010, ce qui rend de plus en plus difficile la recherche d'informations à jour ou l'embauche de développeurs ayant une expertise en XSL-FO.

Courbe d'apprentissage abrupte : XSL-FO nécessite l'apprentissage d'un balisage complexe basé sur XML avec des objets de formatage spécialisés ( fo:block , fo:table , fo:page-sequence , etc.). Moins de 1 % des développeurs connaissent XSL-FO, contre plus de 98 % qui connaissent HTML/CSS.

Aucune prise en charge HTML/CSS : FO.NET ne peut pas interpréter le HTML ou le CSS ; une conversion manuelle du HTML en balisage XSL-FO est nécessaire, et cette fonctionnalité n'est pas intégrée à la bibliothèque. Les équipes qui utilisent du contenu web ou des modèles HTML doivent mettre en œuvre une logique de conversion personnalisée.

Maintenance abandonnée : le dépôt CodePlex d'origine est abandonné et les forks GitHub ne sont plus activement maintenus. Les correctifs de sécurité, les corrections de bogues et les nouvelles fonctionnalités ne sont pas en cours de développement.

Limitations de la plateforme : FO.NET a des dépendances internes à System.Drawing qui l'empêchent de fonctionner sous Linux/macOS, limitant ainsi son déploiement aux environnements Windows uniquement. Les applications modernes nécessitent de plus en plus un déploiement multiplateforme.

Fonctionnalités modernes manquantes : absence de prise en charge de JavaScript, de fonctionnalités CSS3 (Flexbox, Grid), de polices web modernes et de capacité de rendu direct des URL.

Forces et considérations

Les points forts de .NET

  • Conversion directe XSL-FO : optimisée spécifiquement pour la conversion XSL-FO en PDF
  • Logiciel libre : licence Apache 2.0 — utilisation, modification et distribution gratuites
  • Contrôle précis : XSL-FO offre un contrôle détaillé de la mise en page des documents

Considérations sur .NET

  • Technologie obsolète : la spécification XSL-FO n'a pas été mise à jour depuis 2006.
  • Nécessite des connaissances en XSL-FO : moins de 1 % des développeurs possèdent cette expertise
  • Prise en charge HTML inexistante : impossible d'afficher le contenu HTML ou CSS
  • Abandonné : Aucune maintenance ni mise à jour de sécurité active
  • Windows uniquement : les dépendances de System.Drawing empêchent l'utilisation multiplateforme
  • Aucun rendu d'URL : impossible de convertir directement les pages Web
  • Documentation limitée : les ressources sont obsolètes

Les points forts d'IronPDF

  • Norme HTML/CSS : utilise des technologies web que plus de 98 % des développeurs connaissent déjà.
  • Rendu moderne : moteur Chromium avec prise en charge complète de CSS3 et JavaScript
  • Développement actif : mises à jour mensuelles avec de nouvelles fonctionnalités et des correctifs de sécurité
  • Multiplateforme : Prise en charge complète de Windows, Linux et macOS
  • Rendu direct d'URL : fonctionnalité native RenderUrlAsPdf()
  • Fonctionnalités professionnelles : en-têtes, pieds de page, filigranes, sécurité — tout est intégré.
  • Ressources complètes : tutoriels et documentation détaillés

Considérations relatives à IronPDF

  • Licence commerciale : Une licence est requise pour une utilisation en production.
  • Paradigme différent : les modèles XSL-FO doivent être convertis en HTML

Conclusion

FO.NET etIronPDFreprésentent des approches fondamentalement différentes de la génération de PDF en .NET. FO.NET sert le cas d'utilisation de niche de la conversion XSL-FO en PDF, mais sa dépendance à l'égard d'une technologie obsolète, sa maintenance abandonnée, sa limitation à Windows et son manque de support HTML le rendent de plus en plus difficile à justifier pour de nouveaux projets.

IronPDF propose une approche moderne utilisant les normes web HTML/CSS qui s'aligne sur les compétences et les technologies actuelles des développeurs. La capacité à rendre directement le HTML, les URL et à utiliser l'intégralité du CSS3 avec un moteur Chromium permet de répondre aux exigences contemporaines en matière de génération de PDF.

Alors que les entreprises planifient .NET 10, C# 14 et le développement d'applications jusqu'en 2026, la base technologique est importante. Les équipes qui maintiennent d'anciens systèmes XSL-FO peuvent continuer à utiliser FO.NET, mais la voie à suivre pour la génération de PDF modernes s'oriente clairement vers des solutions basées sur HTML comme IronPDF, qui tirent parti de l'expertise existante en matière de développement web.

Commencez à évaluerIronPDFavec un essai gratuit et explorez la documentation complète pour évaluer l'adéquation à vos besoins spécifiques.