COMPARACIóN

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ísticaiText7 / iTextSharpIronPDF
LicenciaAGPL (viral) o suscripción caraOpción comercial perpetua
HTML a PDFComplemento pdfHTML independiente (coste adicional)Renderizador Chromium integrado
Riesgo del código abiertoDeben ser aplicaciones web de código abierto bajo licencia AGPLSin requisitos virales
Modelo de preciosSólo por suscripciónPerpetua o por suscripción
Opción perpetuaEliminadoDisponible 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.

AspectoiTextIronPDF
Paradigma APIProgramática (párrafo, tabla, celda)HTML primero con CSS
Soporte CSSCSS básico (mediante el complemento pdfHTML)CSS3 completo, Flexbox, Grid
JavaScriptNingunoEjecución completa
Curva de aprendizajeSteep (sistema de coordenadas PDF)Para desarrolladores web
Construcción de contenidoObjetos manuales de bajo nivelPlantillas 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 Class
$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 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 Class
$vbLabelText   $csharpLabel

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.

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 Class
$vbLabelText   $csharpLabel

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");
    }
}
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 Class
$vbLabelText   $csharpLabel

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.

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 Class
$vbLabelText   $csharpLabel

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");
    }
}
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 Class
$vbLabelText   $csharpLabel

iText 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 iText7clase iTextSharpEquivalente de IronPDF
PdfWriter|PdfWriter|ChromePdfRenderer`
Documento PDFDocumentoDocumento PDF
DocumentoDocumentoChromePdfRenderer.RenderHtmlAsPdf()
PárrafoPárrafoHTML <p>, <h1>, etc.
TablaTabla PDFHTML `
CélulaPdfPCellHTML <td>, <th>
ImagenImagenHTML
ListaListaHTML <ul>, <ol>
ListItem|ListItem| HTML
  • `
  • PdfReaderPdfReaderPdfDocument.FromFile()
    PdfMergerN/APdfDocument.Merge()
    Extractor de texto pdfExtractor de texto pdfpdf.ExtractAllText()

    Métodos

    TareaiText7IronPDF
    Crear PDF a partir de HTMLHtmlConverter.ConvertToPdf()renderer.RenderHtmlAsPdf()
    Crear PDF a partir de URLDescargar HTML + convertirrenderer.RenderUrlAsPdf()
    Crear PDF a partir de un archivoHtmlConverter.ConvertToPdf(File.ReadAllText())renderer.RenderHtmlFileAsPdf()
    Guardar en archivodocument.Close() (vía stream)pdf.SaveAs()
    Guardar en bytesmemoryStream.ToArray()pdf.BinaryData
    Abrir PDF existentenuevo PdfDocument(nuevo PdfReader(ruta))PdfDocument.FromFile()
    Fusionar PDFPdfMerger.Merge()PdfDocument.Merge()
    Extraer textoPdfTextExtractor.GetTextFromPage()pdf.ExtractAllText()

    Mapeo de estilos

    método iText7Equivalente 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()| CSScolor de fondo`
    SetBorder()CSS borde

    Resumen comparativo de características

    CaracterísticaiTextIronPDF
    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.