iText frente a IronPDF: Guía de comparación técnica
Esta comparación analiza ambas bibliotecas en aspectos técnicos relevantes para ayudar a los desarrolladores y arquitectos a tomar decisiones informadas para sus necesidades de PDF .NET.
Descripción general de iText/ iTextSharp
iText es una biblioteca de PDF con doble licencia que permite crear PDF desde cero, modificar documentos existentes y realizar tareas como agregar texto, imágenes y funciones de seguridad. La biblioteca utiliza un enfoque de API programática donde los desarrolladores crean contenido PDF utilizando clases como <código>PdfWriter</código, Documento PDF, Documento, Párrafo, <código>Tabla</códigoy Célula.
iText 7 utiliza espacios de nombres como iText.Kernel.Pdf , iText.Layout , iText.Layout.Element y iText.Html2pdf . La creación de un PDF implica crear un <código>PdfWriter</código, envolverlo en un Documento PDFy luego crear un Documentopara el diseño del contenido. El texto se añade mediante objetos Paragraph, las tablas mediante objetos <código>Tabla</códigoy 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 con un coste adicional.
iText está disponible bajo la licencia AGPL, que requiere que cualquier software que incorpore código AGPL en una aplicación web también se publique como código abierto, o el desarrollador debe comprar 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 <código>ChromePdfRenderer</códigocomo 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);
}
}
}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 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");
}
}iText 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.
iTexto:
// 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);
}
}
}IronPDF:
// 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");
}
}iText 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.
iTexto:
// 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());
}
}
}
}
}IronPDF:
// 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");
}
}iText requiere crear un <código>PdfWriter</códigopara la salida, crear un Documento PDFde destino, crear un PdfMerger, luego iterar a través de los archivos de origen para crear instancias de <código>PdfReader</códigoy 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 |
|---|---|---|
| <código>PdfWriter</código | <código>PdfWriter</código | <código>ChromePdfRenderer</código |
Documento PDF | Documento | Documento PDF |
Documento | Documento | <código>ChromePdfRenderer.RenderHtmlAsPdf()</código |
Párrafo | Párrafo | HTML <p>, <h1>, etc. |
| <código>Tabla</código | Tabla PDF | HTML <código> |
Célula | PdfPCell | HTML <td>, <th> |
Imagen | Imagen | HTML <código> |
Lista | Lista | HTML <ul>, <ol> |
| <código>ListItem</código | <código>ListItem</código | HTML <li> |
| <código>PdfReader</código | <código>PdfReader</código | <código>PdfDocument.FromFile()</código |
| <código>PdfMerger</código | N/A | PdfDocument.Merge() |
Extractor de texto pdf | Extractor de texto pdf | <código>pdf.ExtractAllText()</código |
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 | <código>HtmlConverter.ConvertToPdf(File.ReadAllText())</código | renderer.RenderHtmlFileAsPdf() |
| Guardar en archivo | document.Close() (vía stream) | <código>pdf.SaveAs()</código |
| Guardar en bytes | <código>memoryStream.ToArray()</código | <código>pdf.BinaryData</código |
| Abrir PDF existente | nuevo PdfDocument(nuevo PdfReader(ruta)) | <código>PdfDocument.FromFile()</código |
| Fusionar PDF | <código>PdfMerger.Merge()</código | PdfDocument.Merge() |
| Extraer texto | <código>PdfTextExtractor.GetTextFromPage()</código | <código>pdf.ExtractAllText()</código |
Mapeo de estilos
| método iText7 | Equivalente de IronPDF |
|---|---|
| <código>SetTextAlignment(TextAlignment.CENTER)</código | CSS alineación de texto: centro |
| <código>SetFontSize(12)</código | CSS tamaño de fuente: 12px |
| <código>SetBold()</código> | CSS font-weight: negrita |
| <código>SetBackgroundColor()</código | CSS color de fondo |
| <código>SetBorder()</código> | 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 altamente 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 solo por suscripción: iTextha eliminado las licencias perpetuas y requiere renovaciones de suscripciones anuales 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.
Costo del complemento pdfHTML: para convertir HTML a PDF con iText, los desarrolladores deben invertir en el complemento pdfHTML separado, lo que aumenta los costos y la complejidad.IronPDFincluye la conversión de HTML a PDF en el producto base con un moderno motor de renderizado Chromium.
Complejidad de la API programática: iTextrequiere la construcción manual de PDF de bajo nivel con Párrafo, <código>Tabla</código, Célulay 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.
Base de código simplificada: la conversión del enfoque programático de iTextal paradigma HTML primero deIronPDFa menudo da como resultado significativamente menos código. 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
- Conjunto completo de funciones: amplias capacidades de manipulación de PDF
- Amplia adopción: gran comunidad y extensa documentación
- Multiplataforma: funciona en varias plataformas .NET
- Control de grano fino: 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
- Solo 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: mantener el código propietario en código cerrado
- HTML a PDF integrado: no se requiere ningún complemento independiente
- Motor Chromium: compatibilidad completa con CSS3, Flexbox, Grid y JavaScript
- Apto para desarrolladores web: utiliza conocimientos familiares de HTML/CSS
- API más sencilla: métodos concisos para operaciones comunes
- Recursos completos: tutoriales y documentación extensos
Consideraciones sobre IronPDF
- Licencia comercial: requerida para uso en producción
- Paradigma HTML-First: Enfoque diferente a 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.