FO.NET vs IronPDF for .NET : Guide de comparaison technique
FO.NET vsIronPDF: Une comparaison technique pour les développeurs .NET
Lorsque les développeurs .NET évaluent les solutions de génération de PDF, FO.NET apparaît comme un outil de niche spécifiquement conçu pour convertir les documents XSL-FO en PDF. Cependant, sa dépendance au langage XSL-FO obsolète, son manque de support HTML/CSS et son statut de maintenance abandonnée conduisent de nombreuses équipes à évaluer d'autres solutions.IronPDFpropose une approche moderne utilisant les normes web HTML/CSS que la plupart des développeurs connaissent déjà, avec un moteur de rendu Chromium et des mises à jour mensuelles actives.
Cette comparaison examine les deux bibliothèques à travers des dimensions techniquement pertinentes afin d'aider les développeurs professionnels et les architectes à prendre des décisions éclairées pour leurs besoins en .NET PDF.
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 traduit le langage XSL-FO directement 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 essentielle est que FO.NET nécessite des connaissances en XSL-FO, un langage basé sur XML qui est une spécification du W3C datant de 2001 et n'ayant fait l'objet d'aucune mise à jour depuis 2006. La bibliothèque ne prend pas en charge le HTML ou le CSS, et ne peut pas rendre directement les pages web. XSL-FO est largement considéré comme obsolète dans le paysage technologique actuel, moins de 1 % des développeurs ayant une expertise dans ce domaine, 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 le style et la mise en page des documents, en tirant parti des normes web omniprésentes dans le 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 est activement maintenu avec des versions 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 démontre la différence de paradigme 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));
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
Le contraste est saisissant. 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();
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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));
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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 | Notes |
|---|---|---|
FonetDriver.Make() |
new ChromePdfRenderer() |
Créer un moteur de rendu |
driver.Render(inputStream, outputStream) |
renderer.RenderHtmlAsPdf(html) |
Rendu de base |
driver.Render(inputFile, outputStream) |
renderer.RenderHtmlFileAsPdf(path) |
Basé sur des fichiers |
driver.BaseDirectory |
RenderingOptions.BaseUrl |
Chemin de base pour les ressources |
driver.OnError += handler |
Try/catch autour du rendu | Gestion des erreurs |
Mappage XSL-FO vers RenderingOptions
| Attribut XSL-FO | Options de rendu IronPDF | Notes |
|---|---|---|
hauteur de la page/largeur de la page |
Taille du papier |
Tailles standard ou personnalisées |
margin-top |
MarginTop |
En millimètres |
margin-bottom |
MarginBottom |
En millimètres |
marge-gauche |
MarginLeft |
En millimètres |
margin-right |
MarginRight |
En millimètres |
référence-orientation |
Orientation du papier |
Portrait/paysage |
Mappage d'éléments XSL-FO en HTML
| Élément XSL-FO | Équivalent HTML | Notes |
|---|---|---|
<fo:root> |
<html> |
Élément racine |
<fo:layout-master-set> |
Règle @page CSS |
Mise en page |
<fo:simple-page-master> |
CSS @page |
Définition de la page |
<fo:page-séquence> |
<body> ou <div> |
Contenu de la page |
<fo:flow> |
<main> ou <div> |
Contenu principal |
<fo:static-content> |
HtmlHeaderFooter |
En-têtes/pieds de page |
<fo:block> |
<p>, <div>, <h1>-<h6> |
Contenu du bloc |
<fo:table> |
<table> |
Tableaux |
<fo:list-block> |
<ul>, <ol> |
Listes |
<fo:external-graphic> |
<img> |
Images |
<fo:page-numéro/> |
{page} placeholder |
Nombre de pages |
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 fait l'objet d'aucune 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 XML complexe 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.
Pas de support HTML/CSS : FO.NET ne peut pas rendre HTML ou CSS - il faut une conversion manuelle de HTML en balisage XSL-FO, ce qui n'est pas intégré dans 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 original de CodePlex n'existe plus 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 plate-forme : FO.NET a des dépendances internes avec System.Drawing qui l'empêchent de fonctionner sous Linux/macOS, ce qui limite le déploiement aux environnements Windows uniquement. Les applications modernes nécessitent de plus en plus un déploiement multiplateforme.
<Fonctionnalités modernes manquantes : pas de prise en charge de JavaScript, pas de fonctionnalités CSS3 (Flexbox, Grid), pas de polices web modernes et pas de capacité de rendu d'URL directes.
Forces et considérations
Les points forts de .NET
- Conversion XSL-FO directe : Optimisé spécifiquement pour la conversion de XSL-FO en PDF
- Open Source : Licence Apache 2.0, libre d'utilisation, de modification et de distribution
- Contrôle précis : XSL-FO permet un contrôle détaillé de la mise en page du document
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 ont une expertise
- Pas de support HTML : Impossible de rendre le contenu HTML ou CSS
- Abandoned : Pas de maintenance active ou de mises à jour de sécurité
- <Windows uniquement : les dépendances System.Drawing empêchent l'utilisation multiplateforme
- Pas de rendu d'URL : Impossible de convertir directement des pages web
- Documentation limitée : Les ressources sont obsolètes
Les points forts d'IronPDF
- HTML/CSS Standard : Utilise les 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 de JavaScript
- Développement actif : Des versions mensuelles avec de nouvelles fonctionnalités et des correctifs de sécurité
- Cross-Platform : Prise en charge réelle de Windows, Linux et macOS
- Rendu d'URL direct : capacité native
RenderUrlAsPdf() - Caractéristiques professionnelles : En-têtes, pieds de page, filigranes, sécurité - tous intégrés
- Ressources complètes : tutoriels et documentation exhaustifs
Considérations relatives à IronPDF
- Licence commerciale : Nécessite une licence pour l'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.