iText frente a IronPDF: Guía de comparación técnica
Esta comparación examina ambas bibliotecas a través de aspectos técnicos relevantes para ayudar a los desarrolladores y arquitectos a tomar decisiones informadas para sus necesidades de .NET PDF.
Descripción general de iText/ iTextSharp
iText es una biblioteca PDF con doble licencia que permite crear PDF desde cero, modificar documentos existentes y realizar tareas como añadir texto, imágenes y funciones de seguridad. La biblioteca utiliza un enfoque API programático en el que los desarrolladores crean contenido PDF utilizando clases como PdfWriter, PdfDocument, Document, Paragraph, Tablay Cell.
iText 7 utiliza espacios de nombres como iText.Kernel.Pdf, iText.Layout, iText.Layout.Element y iText.Html2pdf. La creación de PDF implica crear un PdfWriter, envolverlo en un Documento PDFy, a continuación, crear un Documentopara el diseño del contenido. El texto se añade mediante objetos Paragraph, las tablas mediante objetos Tablay Cell, y las imágenes mediante la clase Imagencon ImageDataFactory.
Para la conversión de HTML a PDF, iTextrequiere el complemento independiente pdfHTML, disponible a través del espacio de nombres iText.Html2pdf con el método HtmlConverter.ConvertToPdf(). Este complemento se vende por separado y tiene un coste adicional.
iText está disponible bajo la licencia AGPL, que exige que cualquier software que incorpore código AGPL en una aplicación web se publique también como código abierto, o que el desarrollador adquiera una licencia comercial. iTextha eliminado las licencias perpetuas y exige renovaciones anuales de la suscripción para uso comercial.
Descripción general de IronPDF
IronPDF es una biblioteca comercial de PDF diseñada para desarrolladores .NET que prefieren trabajar con HTML y CSS en lugar de la construcción programática de PDF. La biblioteca utiliza un moderno motor de renderizado Chromium, que proporciona una renderización precisa de HTML5, CSS3, JavaScript y sistemas de diseño modernos como Flexbox y Grid.
IronPDF utiliza la clase ChromePdfRenderercomo mecanismo principal de generación de PDF con métodos como RenderHtmlAsPdf(), RenderUrlAsPdf() y RenderHtmlFileAsPdf(). La biblioteca devuelve objetos Documento PDFque se pueden guardar con SaveAs() o a los que se puede acceder como BinaryData. La configuración utiliza las propiedades RenderingOptions para el tamaño del papel, los márgenes, los encabezados y los pies de página.
IronPDF ofrece opciones de licencia perpetua y de suscripción, sin requisitos de licencia viral. La conversión de HTML a PDF está integrada en el producto base, sin necesidad de complementos adicionales.
Comparación de licencias y modelos de negocio
La diferencia más significativa entre estas bibliotecas tiene que ver con las licencias y las implicaciones comerciales.
| Característica | iText7 / iTextSharp | IronPDF |
|---|---|---|
| Licencia | AGPL (viral) o suscripción cara | Opción comercial perpetua |
| HTML a PDF | Complemento pdfHTML independiente (coste adicional) | Renderizador Chromium integrado |
| Riesgo del código abierto | Deben ser aplicaciones web de código abierto bajo licencia AGPL | Sin requisitos virales |
| Modelo de precios | Sólo por suscripción | Perpetua o por suscripción |
| Opción perpetua | Eliminado | Disponible en |
La trampa de la licencia AGPL es especialmente problemática para las aplicaciones web comerciales. Si utiliza iTexten una aplicación web sin adquirir una licencia comercial, la AGPL le exige que abra toda su aplicación, no solo el código PDF, sino toda su base de código.
Comparación de paradigmas de API
La filosofía fundamental de diseño de las API difiere significativamente entre las bibliotecas.
| Aspecto | iText | IronPDF |
|---|---|---|
| Paradigma API | Programática (párrafo, tabla, celda) | HTML primero con CSS |
| Soporte CSS | CSS básico (mediante el complemento pdfHTML) | CSS3 completo, Flexbox, Grid |
| JavaScript | Ninguno | Ejecución completa |
| Curva de aprendizaje | Steep (sistema de coordenadas PDF) | Para desarrolladores web |
| Construcción de contenido | Objetos manuales de bajo nivel | Plantillas HTML |
iText crea PDF mediante programación con construcción explícita de objetos.IronPDFutiliza HTML/CSS, lo que permite a los desarrolladores web aplicar directamente sus conocimientos.
Comparación de códigos: Operaciones comunes en PDF
Conversión de HTML a PDF
La operación más fundamental demuestra los diferentes enfoques y requisitos complementarios.
iText (requiere el complemento pdfHTML):
// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;
class Program
{
static void Main()
{
string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
string outputPath = "output.pdf";
using (FileStream fs = new FileStream(outputPath, FileMode.Create))
{
HtmlConverter.ConvertToPdf(html, fs);
}
}
}// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;
class Program
{
static void Main()
{
string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
string outputPath = "output.pdf";
using (FileStream fs = new FileStream(outputPath, FileMode.Create))
{
HtmlConverter.ConvertToPdf(html, fs);
}
}
}Imports iText.Html2pdf
Imports System.IO
Class Program
Shared Sub Main()
Dim html As String = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
Dim outputPath As String = "output.pdf"
Using fs As FileStream = New FileStream(outputPath, FileMode.Create)
HtmlConverter.ConvertToPdf(html, fs)
End Using
End Sub
End ClassIronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</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 a PDF from HTML.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End ClassiText requiere el espacio de nombres independiente iText.Html2pdf (del complemento pdfHTML), crea un FileStream manualmente y llama a HtmlConverter.ConvertToPdf()para escribir directamente en el flujo.
IronPDF crea un ChromePdfRenderer, llama a RenderHtmlAsPdf() con la cadena HTML y guarda con SaveAs(). El motor Chromium ofrece compatibilidad total con CSS3 y JavaScript sin necesidad de complementos adicionales.
Para conocer las opciones avanzadas de conversión de HTML, consulte la Guía de conversión de HTML a PDF.
Creación de PDF con texto e imágenes
La construcción programática de PDF muestra la diferencia de paradigma más claramente.
iText:
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;
class Program
{
static void Main()
{
string outputPath = "document.pdf";
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdf = new PdfDocument(writer))
using (Document document = new Document(pdf))
{
document.Add(new Paragraph("Sample PDF Document"));
document.Add(new Paragraph("This document contains text and an image."));
Image img = new Image(ImageDataFactory.Create("image.jpg"));
img.SetWidth(200);
document.Add(img);
}
}
}// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;
class Program
{
static void Main()
{
string outputPath = "document.pdf";
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdf = new PdfDocument(writer))
using (Document document = new Document(pdf))
{
document.Add(new Paragraph("Sample PDF Document"));
document.Add(new Paragraph("This document contains text and an image."));
Image img = new Image(ImageDataFactory.Create("image.jpg"));
img.SetWidth(200);
document.Add(img);
}
}
}Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.IO.Image
Class Program
Shared Sub Main()
Dim outputPath As String = "document.pdf"
Using writer As New PdfWriter(outputPath),
pdf As New PdfDocument(writer),
document As New Document(pdf)
document.Add(New Paragraph("Sample PDF Document"))
document.Add(New Paragraph("This document contains text and an image."))
Dim img As New Image(ImageDataFactory.Create("image.jpg"))
img.SetWidth(200)
document.Add(img)
End Using
End Sub
End ClassIronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Sample PDF Document</h1>
<p>This document contains text and an image.</p>
<img src='image.jpg' width='200' />";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = @"
<h1>Sample PDF Document</h1>
<p>This document contains text and an image.</p>
<img src='image.jpg' width='200' />";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "
<h1>Sample PDF Document</h1>
<p>This document contains text and an image.</p>
<img src='image.jpg' width='200' />"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End ClassiText requiere crear un PdfWriter, envolverlo en un PdfDocument, crear un Documentopara la maquetación y, a continuación, añadir objetos Párrafoy objetos Imagencreados mediante ImageDataFactory. Cada elemento requiere una construcción y configuración explícitas.
IronPDF utiliza HTML estándar -encabezados, párrafos y etiquetas <img>-, todo ello estilizado con atributos HTML o CSS conocidos. El motor Chromium se encarga de la renderización, produciendo el mismo resultado con mucho menos código.
Fusión de varios PDF
La fusión de documentos demuestra las diferencias de complejidad de las API.
iText:
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;
class Program
{
static void Main()
{
string outputPath = "merged.pdf";
string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdfDoc = new PdfDocument(writer))
{
PdfMerger merger = new PdfMerger(pdfDoc);
foreach (string file in inputFiles)
{
using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
{
merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
}
}
}
}
}// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;
class Program
{
static void Main()
{
string outputPath = "merged.pdf";
string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };
using (PdfWriter writer = new PdfWriter(outputPath))
using (PdfDocument pdfDoc = new PdfDocument(writer))
{
PdfMerger merger = new PdfMerger(pdfDoc);
foreach (string file in inputFiles)
{
using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
{
merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
}
}
}
}
}Imports iText.Kernel.Pdf
Imports iText.Kernel.Utils
Imports System.IO
Class Program
Shared Sub Main()
Dim outputPath As String = "merged.pdf"
Dim inputFiles As String() = {"document1.pdf", "document2.pdf", "document3.pdf"}
Using writer As New PdfWriter(outputPath)
Using pdfDoc As New PdfDocument(writer)
Dim merger As New PdfMerger(pdfDoc)
For Each file As String In inputFiles
Using sourcePdf As New PdfDocument(New PdfReader(file))
merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages())
End Using
Next
End Using
End Using
End Sub
End ClassIronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfDocuments = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf"),
PdfDocument.FromFile("document3.pdf")
};
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfDocuments = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf"),
PdfDocument.FromFile("document3.pdf")
};
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
}
}Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim pdfDocuments As New List(Of PdfDocument) From {
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf"),
PdfDocument.FromFile("document3.pdf")
}
Dim merged = PdfDocument.Merge(pdfDocuments)
merged.SaveAs("merged.pdf")
End Sub
End ClassiText requiere crear un PdfWriterpara la salida, crear un Documento PDFde destino, crear un PdfMerger, luego iterar a través de los archivos de origen para crear instancias de PdfReadery PdfDocument, llamar a merger.Merge() con rangos de páginas y gestionar la eliminación de todos los objetos.
IronPDF carga documentos con PdfDocument.FromFile(), crea una lista y llama al método estático PdfDocument.Merge(). La operación es significativamente más concisa.
Obtenga más información sobre la manipulación de PDF en Tutoriales de IronPDF.
Referencia de mapeo de API
Para los desarrolladores que estén evaluando la migración a iTexto comparando capacidades, este mapeo muestra operaciones equivalentes:
Mapeo de clases
| clase iText7 | clase iTextSharp | Equivalente de IronPDF |
|---|---|---|
PdfWriter | ||
Documento PDF | Documento | Documento PDF |
Documento | Documento | ChromePdfRenderer.RenderHtmlAsPdf() |
Párrafo | Párrafo | HTML <p>, <h1>, etc. |
Tabla | Tabla PDF | HTML ` |
Célula | PdfPCell | HTML <td>, <th> |
Imagen | Imagen | HTML |
Lista | Lista | HTML <ul>, <ol> |
ListItem | ||
PdfReader | PdfReader | PdfDocument.FromFile() |
PdfMerger | N/A | PdfDocument.Merge() |
Extractor de texto pdf | Extractor de texto pdf | pdf.ExtractAllText() |
Métodos
| Tarea | iText7 | IronPDF |
|---|---|---|
| Crear PDF a partir de HTML | HtmlConverter.ConvertToPdf() | renderer.RenderHtmlAsPdf() |
| Crear PDF a partir de URL | Descargar HTML + convertir | renderer.RenderUrlAsPdf() |
| Crear PDF a partir de un archivo | HtmlConverter.ConvertToPdf(File.ReadAllText()) | renderer.RenderHtmlFileAsPdf() |
| Guardar en archivo | document.Close() (vía stream) | pdf.SaveAs() |
| Guardar en bytes | memoryStream.ToArray() | pdf.BinaryData |
| Abrir PDF existente | nuevo PdfDocument(nuevo PdfReader(ruta)) | PdfDocument.FromFile() |
| Fusionar PDF | PdfMerger.Merge() | PdfDocument.Merge() |
| Extraer texto | PdfTextExtractor.GetTextFromPage() | pdf.ExtractAllText() |
Mapeo de estilos
| método iText7 | Equivalente de IronPDF |
|---|---|
SetTextAlignment(TextAlignment.CENTER) | CSS alineación de texto: centro |
SetFontSize(12) | CSS tamaño de fuente: 12px |
SetBold()</code>| CSSfont-weight: negrita` | |
SetBackgroundColor() | |
SetBorder() | CSS borde |
Resumen comparativo de características
| Característica | iText | IronPDF |
|---|---|---|
| Construcción programática de PDF | ✅(Enfoque principal) | ⚠️ (en HTML) |
| HTML a PDF | ⚠️ (Requiere el complemento pdfHTML) | ✅(Integrado) |
| Compatibilidad con CSS3 | ⚠️ (Básico vía pdfHTML) | ✅(Completo) |
| Flexbox/Grid | ❌ | ✅ |
| Ejecución de JavaScript | ❌ | ✅ |
| Fusión de PDF | ✅(PdfMerger) | ✅(PdfDocument.Merge()) |
| Extracción de Texto | ✅(PdfTextExtractor) | ✅(ExtractAllText()) |
| Licencia perpetua | ❌(Eliminado) | ✅ |
| Sin riesgo AGPL | ❌(AGPL o suscripción) | ✅ |
| Apoyo a la comunidad | ✅(Extenso) | ✅ |
Cuándo los equipos consideran cambiar de iTexta IronPDF
Los equipos de desarrollo evalúan la transición de iTextaIronPDFpor varias razones:
Trampa de la licencia AGPL: La licencia AGPL es muy restrictiva para las aplicaciones web comerciales. Si utiliza iTexten una aplicación web sin adquirir una licencia comercial, la AGPL le exige que abra toda su aplicación, no solo el código PDF, sino toda su base de código. Los equipos que desarrollan software propietario a menudo no pueden aceptar este requisito de licencia viral.
Licencias comerciales por suscripción: iTextha eliminado las licencias perpetuas, requiriendo renovaciones anuales de suscripción para uso comercial. Los equipos que prefieren las compras únicas encuentran que la opción de licencia perpetua deIronPDFes más adecuada para el presupuesto.
Coste del complemento pdfHTML: Para convertir HTML a PDF con iText, los desarrolladores deben invertir en el complemento pdfHTML por separado, lo que aumenta los costes y la complejidad.IronPDFincluye la conversión de HTML a PDF en el producto base con un moderno motor de renderizado Chromium.
Complejidad programática de la API: iTextrequiere la construcción manual de PDF de bajo nivel con Párrafo, Tabla, Celda y otros objetos. Los equipos con experiencia en desarrollo web encuentran el enfoque HTML/CSS deIronPDFmás intuitivo y productivo.
Estándares web modernos: Incluso con pdfHTML, iTexttiene un soporte limitado para CSS y JavaScript complejos. El motor Chromium deIronPDFproporciona una ejecución completa de CSS3, Flexbox, Grid y JavaScript para contenidos web modernos.
Código base simplificado: La conversión del enfoque programático de iTextal paradigma HTML-first deIronPDFa menudo da como resultado un código significativamente menor. Las tablas de informes que requieren docenas de líneas con objetos Table, Célulay Párrafose convierten en simples tablas HTML con estilo CSS.
Fuerzas y consideraciones
Puntos fuertes de iText
- Completo conjunto de funciones: Amplias capacidades de manipulación de PDF
- Amplia adopción: Amplia comunidad y extensa documentación
- Multiplataforma: Funciona en varias plataformas .NET
- Fine-Grained Control: Manipulación directa de objetos PDF para necesidades especializadas
Consideraciones sobre iText
- Licencia AGPL: La licencia viral requiere aplicaciones web de código abierto o suscripción comercial
- Sólo suscripción: Se elimina la licencia perpetua
- Complemento pdfHTML: La conversión de HTML a PDF requiere una compra por separado
- Complejidad programática: Curva de aprendizaje pronunciada con el sistema de coordenadas PDF
- CSS moderno limitado: Compatibilidad básica con CSS incluso con pdfHTML
- Sin JavaScript: No se puede ejecutar JavaScript en contenido HTML
Puntos fuertes de IronPDF
- Licencia perpetua: Opción de compra única
- Sin riesgo AGPL: Mantenga el código propietario cerrado
- Incorporación de HTML a PDF: No es necesario ningún complemento adicional
- Motor Chromium: Compatibilidad total con CSS3, Flexbox, Grid y JavaScript
- Adecuado para desarrolladores web: Utiliza conocimientos conocidos de HTML/CSS
- API más sencilla: Métodos concisos para operaciones comunes
- Recursos completos: Amplios tutoriales y documentación
Consideraciones sobre IronPDF
- Licencia comercial: Requerida para uso en producción
- Paradigma HTML-First: Enfoque diferente de la construcción programática
Conclusión
iText yIronPDFrepresentan enfoques fundamentalmente diferentes para la generación de PDF en aplicaciones .NET. iTextofrece una completa construcción programática de PDF mediante clases como Párrafo, Tabla y Celda, pero conlleva importantes problemas de licencia: la licencia AGPL requiere aplicaciones web de código abierto, se ha eliminado la licencia perpetua y la conversión de HTML a PDF requiere la compra de un complemento pdfHTML por separado.
IronPDF ofrece una alternativa moderna con conversión integrada de HTML a PDF mediante un motor Chromium, opciones de licencia perpetua y sin requisitos de licencia viral. El enfoque HTML-first permite a los desarrolladores web aplicar directamente sus conocimientos, lo que a menudo se traduce en un código más sencillo y fácil de mantener.
A medida que las organizaciones planifican .NET 10, C# 14 y el desarrollo de aplicaciones hasta 2026, la elección entre la construcción programática de PDF con licencia AGPL y el renderizado basado en HTML con licencia comercial afecta significativamente tanto al cumplimiento legal como a la productividad del desarrollo. Los equipos que buscan eliminar el riesgo de AGPL, reducir la complejidad de las licencias o aprovechar las habilidades de desarrollo web para la generación de PDF encontrarán queIronPDFaborda estos requisitos de manera eficaz.
Comience a evaluarIronPDFcon una prueba gratuita y explore la documentación exhaustiva para evaluar si se adapta a sus requisitos específicos.