Cómo migrar de iText a IronPDF en C#
Migrar de iText a IronPDF: Guía completa de migración a C
La migración de iText aIronPDFtransforma su flujo de trabajo PDF .NET de una API programática que requiere la construcción manual de objetos Párrafo, Tabla y Celda a un enfoque moderno basado en HTML con compatibilidad total con CSS3 y JavaScript. Esta guía proporciona una ruta de migración completa y paso a paso que elimina los problemas de licencia AGPL y la necesidad de complementos pdfHTML independientes para desarrolladores .NET profesionales.
Por qué migrar de iText a IronPDF
La trampa de la licencia AGPL
iText presenta graves riesgos legales y empresariales para las aplicaciones comerciales que muchos equipos de desarrollo descubren demasiado tarde:
Licencia Viral AGPL: Si utiliza iText en una aplicación web, la AGPL le exige que abra el código fuente de TODA su aplicación, no sólo del código PDF, sino de toda su base de código. Esto es imposible para la mayoría del software comercial.
Sin licencia perpetua: iText ha eliminado las licencias perpetuas, que obligan a renovaciones anuales de la suscripción que aumentan el coste total de propiedad.
Coste del complemento pdfHTML: La funcionalidad de HTML a PDF requiere el complemento pdfHTML, que se vende por separado con un coste adicional a la licencia básica.
Auditorías de licencias complejas: las implantaciones empresariales se enfrentan a la complejidad de las licencias y al riesgo de auditorías que pueden retrasar los proyectos y crear riesgos legales.
API sólo programática: iText requiere la construcción manual de PDF de bajo nivel con objetos <código>Párrafo</código>, <código>Tabla</código>, <código>Celda</código>, lo que resulta tedioso y propenso a errores para diseños complejos.
- Renderizado web moderno limitado: incluso con pdfHTML, el contenido CSS y JavaScriptcomplejo requiere un esfuerzo adicional significativo.
Comparación entre iText e IronPDF
| Característica | iText 7 / iTextSharp | IronPDF |
|---|---|---|
| Licencia | AGPL (viral) o suscripción cara | Opción comercial perpetua |
| HTML a PDF | Complemento pdfHTML independiente | Renderizador Chromium integrado |
| Soporte CSS | CSS básico | CSS3 completo, Flexbox, Grid |
| JavaScript | Ninguno | Ejecución completa |
| Paradigma API | Programática (párrafo, tabla, celda) | HTML primero con CSS |
| Curva de aprendizaje | Steep (sistema de coordenadas PDF) | Para desarrolladores web |
| Riesgos del código abierto | Debe aplicaciones web de código abierto | Sin requisitos virales |
| Modelo de precios | Sólo por suscripción | Perpetua o por suscripción |
Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base preparada para el futuro con su enfoque basado en HTML que aprovecha las habilidades de desarrollo web que su equipo ya tiene.
Evaluación de la complejidad de la migración
Esfuerzo estimado por función
| Característica | Complejidad de la migración | Notas |
|---|---|---|
| HTML a PDF | Muy bajo | Sustitución directa de métodos |
| Fusionar PDF | Bajo | API más sencilla |
| Texto e imágenes | Bajo | HTML sustituye a programática |
| Tablas | Medio | Las tablas HTML sustituyen a la clase iText Table |
| Encabezados/pies de página | Medio | Manejadores de eventos → Plantillas HTML |
| Seguridad/Encriptación | Bajo | API basada en propiedades |
Cambio de paradigma
El cambio fundamental en esta migración de iText es de la construcción programática de PDF a la presentación de HTML en primer lugar:
using IronPdf; iText: PdfWriter → PdfDocument → Document → Add(Paragraph) → Add(Table) IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(htmlString) → SaveAs() using IronPdf;
Este cambio de paradigma es liberador: en lugar de aprender el modelo de objetos de iText, se utilizan los conocimientos de HTML y CSS que ya poseen los desarrolladores web.
Antes de empezar
Prerrequisitos
- <Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet: Capacidad para instalar paquetes NuGet
- Licencia IronPDF: Obtenga su clave de licencia en ironpdf.com
Cambios en el paquete NuGet
using IronPdf;bash
Remove iText packages
dotnet remove package itext7 dotnet remove package itext7.pdfhtml dotnet remove package itextsharp
Install IronPDF
dotnet add package IronPdf using IronPdf;
Configuración de licencias
using IronPdf;csharp // Add at application startup (Program.cs or Startup.cs) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; using IronPdf;
Identificar el uso de iText
using IronPdf;bash
Find all iText references
grep -r "using iText|using iTextSharp" --include=".cs" . grep -r "PdfWriter|PdfDocument|Document|Paragraph|Table|Cell" --include=".cs" . grep -r "HtmlConverter|ConverterProperties" --include="*.cs" . using IronPdf;
Referencia completa de la API
Clases
| clase iText 7 | 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> |
| <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() |
Mapeo de espacios de nombres
| espacio de nombres iText 7 | Equivalente de IronPDF |
|---|---|
iText.Kernel.Pdf | <código>IronPDF</código |
| <código>iText.Layout</código | <código>IronPDF</código |
iText.Layout.Element | Uso de elementos HTML |
iText.Html2Pdf | <código>IronPDF</código(integrado) |
iText.IO.Image | Utilice HTML <img> |
iText.Kernel.Utils | <código>IronPDF</código |
Ejemplos de migración de código
Ejemplo 1: Conversión de HTML a PDF
Antes (iText 7):
using IronPdf;csharp // NuGet: Install-Package itext7 using iText.Html2pdf; using System.IO;
class Program { static void Main() { string html = "
Hello World
This is a PDF from HTML.
"; string outputPath = "output.pdf"; using (FileStream fs = new FileStream(outputPath, FileMode.Create))
{
HtmlConverter.ConvertToPdf(html, fs);
}
}} using IronPdf;
Después (IronPDF):
using IronPdf;csharp // NuGet: Install-Package IronPdf using IronPdf;
class Program { static void Main() { var renderer = new ChromePdfRenderer(); string html = "
Hello World
This is a PDF from HTML.
"; var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}} using IronPdf;
El enfoque iText requiere el paquete independiente iText.Html2pdf (complemento pdfHTML, se vende por separado), la creación de un FileStream y envolver todo en declaraciones using para su correcta eliminación. El método HtmlConverter.ConvertToPdf() escribe directamente en el flujo.
El enfoque deIronPDFes más limpio: crear un ChromePdfRenderer, llamar a RenderHtmlAsPdf() con su cadena HTML, y llamar a SaveAs() en el Documento PDFresultante. El motor de renderizado Chromium proporciona una compatibilidad superior con CSS3 y JavaScript. Consulte la documentación HTML a PDF para obtener más opciones de conversión.
Ejemplo 2: Combinar varios PDF
Antes (iText 7):
using IronPdf;csharp // 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());
}
}
}
}} using IronPdf;
Después (IronPDF):
using IronPdf;csharp // NuGet: Install-Package IronPdf using IronPdf; using System.Collections.Generic;
class Program { static void Main() { var pdfDocuments = new List
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
}} using IronPdf;
La operación de fusión de iText requiere una gran cantidad de repeticiones: crear un <código>PdfWriter</códigopara la salida, envolverlo en un PdfDocument, crear un <código>PdfMerger</códigoy, a continuación, iterar a través de los archivos de origen con sentencias using anidadas para cada Documento PDFy PdfReader. También debe especificar rangos de páginas con merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages()).
IronPDF reduce esto a tres pasos: cargar documentos con PdfDocument.FromFile(), llamar al método estático PdfDocument.Merge()con la lista, y guardar. Toda la operación de fusión debe ser legible y fácil de mantener. Más información sobre mezclar y dividir archivos PDF.
Ejemplo 3: Crear PDF con texto e imágenes
Antes (iText 7):
using IronPdf;csharp // 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);
}
}} using IronPdf;
Después (IronPDF):
using IronPdf;csharp // 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");
}} using IronPdf;
Este ejemplo ilustra el cambio de paradigma con mayor claridad. iText requiere:
- Sentencias
usinganidadas tres veces (PdfWriter,PdfDocument,Document) - Creación de objetos
Párrafopara cada elemento de texto connew Paragraph() - Uso de
ImageDataFactory.Create()para cargar imágenes - Creación de un objeto
Imageny llamada aSetWidth()por separado - Llamada a
document.Add()para cada elemento
IronPDF utiliza HTML estándar: <h1> para los títulos, <p> para los párrafos y <img> para las imágenes con un atributo width. Los desarrolladores web pueden aprovechar inmediatamente sus conocimientos, y los diseñadores pueden dar estilo a los documentos utilizando CSS que ya conocen.
Notas de migración críticas
Cambio de paradigma: De programático a HTML-First
El cambio más significativo en esta migración de iText es conceptual. iText crea archivos PDF mediante programación:
using IronPdf;csharp // iText approach document.Add(new Paragraph("Title") .SetTextAlignment(TextAlignment.CENTER) .SetFontSize(24) .SetBold());
var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth(); table.AddHeaderCell(new Cell().Add(new Paragraph("ID"))); table.AddHeaderCell(new Cell().Add(new Paragraph("Name"))); // ... many more lines using IronPdf;
IronPDF utiliza HTML y CSS:
using IronPdf;csharp //IronPDFapproach string html = @"
<h1>Title</h1>
<table>
<tr><th>ID</th><th>Name</th></tr>
</table>";var pdf = renderer.RenderHtmlAsPdf(html); using IronPdf;
Licencia AGPL eliminada
la licencia AGPL de iText requiere que toda la aplicación web sea de código abierto o que se adquiera una costosa licencia comercial. La licencia comercial deIronPDFpermite la implementación en software propietario sin requisitos de licencia viral.
No requiere complemento pdfHTML
iText requiere el complemento pdfHTML para la conversión de HTML a PDF, que se vende por separado y tiene un coste adicional.IronPDFincluye el renderizado HTML completo basado en Chromium en el paquete base.
Patrones de sustitución de métodos
| patrón iText | Sustitución de IronPDF | |
|---|---|---|
| <código>SetTextAlignment(TextAlignment.CENTER)</código | CSS alineación de texto: centro | |
| <código>SetFontSize(24)</código | CSS tamaño de fuente: 24px | |
| <código>SetBold()</código> | CSS font-weight: negrita | |
| <código>nueva Tabla(3)</código | HTML <código> | |
AddHeaderCell(new Cell().Add(new Paragraph())) | HTML <código> | </código> |
AddCell(new Cell().Add(new Paragraph())) | HTML <código> | </código> |
Solución de problemas
Número 1: PdfWriter/Patrón de documento
Problema: El código utiliza el patrón de anidación <código>PdfWriter</código→ Documento PDF→ Document.
Solución: Sustituir por ChromePdfRenderer:
using IronPdf;csharp // Delete this iText pattern: // using (var writer = new PdfWriter(outputPath)) // using (var pdfDoc = new PdfDocument(writer)) // using (var document = new Document(pdfDoc))
// Replace with: var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(outputPath); using IronPdf;
Número 2: HtmlConverter Not Found
Problema: El código utiliza iText.Html2pdf.HtmlConverter que requiere el complemento pdfHTML.
Solución: Utilizar el renderizado HTML integrado de IronPDF:
using IronPdf;csharp // iText (requires pdfHTML add-on) HtmlConverter.ConvertToPdf(html, fileStream);
//IronPDF(built-in) var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(outputPath); using IronPdf;
Número 3: Complejidad de PdfMerger
Problema: <código>PdfMerger</códigode iText requiere lectores anidados y especificación de rango de páginas.
Solución: Utilizar el método de fusión estática de IronPDF:
using IronPdf;csharp // iText merger pattern (delete this) // 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(simple) var merged = PdfDocument.Merge(pdfDocuments); merged.SaveAs("merged.pdf"); using IronPdf;
Lista de comprobación de la migración
Pre-Migración
- [ ] Inventario de todas las llamadas a la API de iText en el código base
- [ ] Identificar patrones programáticos de construcción de PDF (Párrafo, Tabla, Celda)
- [ ] Uso de Document HtmlConverter (complemento pdfHTML)
- [ ] Evaluar el riesgo de cumplimiento de la AGPL
- [ ] Obtener la clave de licencia de IronPDF
Migración de código
- [ ] Eliminar paquetes NuGet de iText:
dotnet remove paquete itext7 - [ ] Instalar el paquete NuGet IronPdf:
dotnet add package IronPdf - [ ] Actualizar las importaciones de espacios de nombres (
usando iText.*→usando IronPDF) - [Reemplazar el patrón
PdfWriter/DocumentporChromePdfRenderer - [ ] Convertir
Párrafo/Tabla/Celdaa elementos HTML - [Reemplace
HtmlConverter.ConvertToPdf()porRenderHtmlAsPdf() - [Actualizar las operaciones de fusión a
PdfDocument.Merge() - [ ] Añadir inicialización de clave de licencia al inicio
Pruebas
- [ ] Probar todas las rutas de generación de PDF
- [Verificar que el resultado visual se ajuste a las expectativas
- [ ] Prueba con contenido HTML/CSS complejo
- [Rendimiento de referencia
Posmigración
- [ ] Eliminar archivos de licencia y referencias de iText
- [ ] Actualización de la documentación
- [ ] Cancelar suscripción a iText (si procede)
- [ ] Archivar código iText heredado
Conclusión
La migración de iText aIronPDFelimina la trampa de la licencia AGPL y simplifica el código de generación de PDF. El cambio de paradigma de la construcción programática a la renderización de HTML significa que su equipo puede aprovechar las habilidades de desarrollo web existentes en lugar de aprender el modelo de objetos de iText.
Los cambios clave en esta migración son:
- Licencia: AGPL (viral) → Comercial (permisiva)
- Soporte HTML: Complemento pdfHTML independiente → Chromium integrado
- Paradigma API: Programática (Párrafo, Tabla, Celda) → HTML/CSS
- Fusión: PdfMerger complejo →
PdfDocument.Merge()simple - Curva de aprendizaje: Sistema de coordenadas PDF → Fácil de usar para desarrolladores web
Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración a iText.






