Saltar al pie de página
COMPARACIONES DE PRODUCTOS

Crear PDF desde Array de Bytes C# iTextSharp (vs IronPDF)

En las aplicaciones modernas de .NET, la creación y gestión de archivos PDF es un requerimiento común, ya sea que estés generando informes, facturas o registros digitales. Developers often turn to third-party PDF libraries for this task, and two of the most popular options in the .NET ecosystem are IronPDF and iText 7 (the successor to iTextSharp).

Cada biblioteca ofrece un conjunto de herramientas poderoso para diferentes casos de uso. ¿Pero cuál es la más adecuada para generar un PDF desde un [arreglo de bytes](https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/dd831853(v=vs.120) en C#? Este artículo lo desglosa con comparaciones, ejemplos de código e ideas para ayudar a los desarrolladores .NET a tomar la decisión correcta.

Ya sea que estés construyendo aplicaciones de nivel empresarial o pequeñas herramientas internas, elegir la biblioteca PDF adecuada puede ahorrarte tiempo de desarrollo y garantizar un resultado sólido. Exploraremos qué ofrece cada biblioteca.

Introducción a las Bibliotecas de PDF

¿Para qué se utilizan las Bibliotecas PDF?

Las bibliotecas PDF en C# permiten a los desarrolladores generar, manipular y leer archivos PDF de forma programática. Sirven para una amplia gama de casos de uso, tales como:

  • Exportar informes y facturas
  • Generar contenido dinámico desde formularios web
  • Convertir páginas HTML o plantillas en PDFs
  • Añadir elementos visuales a tus archivos PDF como números de página, gráficos, imágenes y más
  • Fusionar o dividir documentos
  • Firmar digitalmente PDFs

También juegan un papel crucial en la portabilidad de datos y el cumplimiento con estándares como PDF/A para archivado o requisitos de accesibilidad.

iTextSharp y IronPDF: Los Principales Contendientes

Entre las bibliotecas de PDF .NET disponibles, iTextSharp e IronPDF han surgido como soluciones líderes, cada una con fortalezas únicas:

  • iTextSharp es una biblioteca madura de código abierto basada en iText de Java, que ofrece un control robusto de PDF con una curva de aprendizaje pronunciada y advertencias de licencia.
  • IronPDF, una biblioteca comercial moderna, se enfoca en la simplicidad, velocidad e integración web, permitiendo convertir vistas HTML y ASP.NET directamente en archivos PDF.

¿Por qué importa elegir la biblioteca adecuada?

Elegir entre las dos no es solo una cuestión de preferencia, impacta en la productividad, mantenimiento, rendimiento e incluso el cumplimiento con licencias legales. Los proyectos que demandan rápido desarrollo, cambios frecuentes de formato, o renderización de PDF desde plantillas HTML se benefician del desarrollo rápido, mientras que las aplicaciones a nivel empresarial podrían priorizar el cumplimiento de estándares y la mantenibilidad a largo plazo.

Comparación de Características

iText 7 para .NET (Sucesor de iTextSharp)

iText 7 es el sucesor oficial de iTextSharp y ofrece una arquitectura completamente rediseñada. Es una biblioteca poderosa y extensible, adecuada para crear, editar y validar PDFs en industrias con alta necesidad de cumplimiento como legal, financiera y gubernamental. La suite iText 7 incluye soporte para PDF/A, PDF/UA, firmas digitales, redacción y creación de formularios.

Aunque sigue siendo de código abierto bajo la licencia AGPL, la licencia comercial está disponible para proyectos propietarios.

Características Clave de iText 7

  • API moderna, reemplazando la estructura más antigua de iTextSharp
  • Soporte modular: HTML a PDF, PDF/A, formularios, redacción, firmas digitales
  • Alto rendimiento para aplicaciones empresariales
  • Excelente para PDF/A, accesibilidad, cumplimiento

Por favor notaNecesitarás usar itext7 para operaciones principales de PDF y puedes incluir complementos opcionales como html2pdf por separado.

Instalación (NuGet)

Para descargar el paquete principal de iText 7 para la generación de PDF:

Install-Package itext7

Instalación de iText 7 a través de la consola del gestor de paquetes NuGet

También puedes instalar iText 7 a través del Gestor de Paquetes para la pantalla de Solución. Para hacer esto, primero debes ir al menú desplegable de Herramientas, luego encontrar "Gestor de Paquetes NuGet > Administrar Paquetes NuGet para la Solución".

Menú desplegable de herramientas de Visual Studio

Luego, simplemente busca iText 7 y haz clic en "Instalar".

Página del paquete NuGet de iText 7

Ejemplo de Código: Crear documentos PDF desde un Arreglo de Bytes usando iText 7

using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.GeneratePdfWithIText7();
        // Save the PDF to a file
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] GeneratePdfWithIText7()
    {
        using (var ms = new MemoryStream())
        {
            var writer = new PdfWriter(ms);
            var pdf = new iText.Kernel.Pdf.PdfDocument(writer);
            var doc = new Document(pdf);

            doc.Add(new Paragraph("Hello from iText 7 for .NET!"));

            doc.Close(); // Always close the document to finalize content  
            return ms.ToArray();
        }
    }
}
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.GeneratePdfWithIText7();
        // Save the PDF to a file
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] GeneratePdfWithIText7()
    {
        using (var ms = new MemoryStream())
        {
            var writer = new PdfWriter(ms);
            var pdf = new iText.Kernel.Pdf.PdfDocument(writer);
            var doc = new Document(pdf);

            doc.Add(new Paragraph("Hello from iText 7 for .NET!"));

            doc.Close(); // Always close the document to finalize content  
            return ms.ToArray();
        }
    }
}
Imports System.IO
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = pdfGenerator.GeneratePdfWithIText7()
		' Save the PDF to a file
		File.WriteAllBytes("output.pdf", pdfBytes)
	End Sub
End Class

Friend Class PdfGenerator
	Public Function GeneratePdfWithIText7() As Byte()
		Using ms = New MemoryStream()
			Dim writer = New PdfWriter(ms)
			Dim pdf = New iText.Kernel.Pdf.PdfDocument(writer)
			Dim doc = New Document(pdf)

			doc.Add(New Paragraph("Hello from iText 7 for .NET!"))

			doc.Close() ' Always close the document to finalize content
			Return ms.ToArray()
		End Using
	End Function
End Class
$vbLabelText   $csharpLabel

Archivo PDF de salida

Salida PDF de iText 7

Explicación

  • PdfWriter escribe el contenido en un MemoryStream.
  • PdfDocument gestiona la estructura interna del PDF.
  • Document se utiliza para añadir contenido de alto nivel (texto, imágenes, tablas).
  • Después de llamar doc.Close(), el contenido del PDF está completamente escrito y listo para ser retornado como un arreglo de bytes.

Este ejemplo muestra la API más modular y legible de iText 7 en comparación con iTextSharp. Sin embargo, aún carece de soporte nativo para renderizar HTML/CSS a menos que incluyas pdfhtml, que se licencia por separado.

Pros y Contras de iText 7

Pros:

  • Control Integral de PDF\ iText 7 proporciona control total sobre elementos PDF, como tablas, formularios y firmas digitales. Esto lo hace ideal para aplicaciones con alto cumplimiento que requieren estándares específicos de PDF, como PDF/A o PDF/UA.

  • Modular y Escalable\ iText 7 es modular, lo que significa que puedes instalar solo los módulos específicos que necesitas (por ejemplo, pdfhtml para conversión de HTML a PDF). Esto permite una implementación más ligera si no estás utilizando todas las características.

  • Soporta Estándares Complejos de PDF\ iText 7 soporta estándares ISO como PDF/A (archivo), PDF/UA (accesibilidad) y PDF/X (impresión), haciéndolo adecuado para entornos profesionales y legales donde el cumplimiento es crucial.

  • Documentación Rica y Soporte\ iText 7 tiene documentación integral y una gran comunidad. La empresa también ofrece soporte profesional, asegurando que los desarrolladores puedan obtener asistencia cuando sea necesario.

  • Versión Gratuita Disponible (AGPL)\ Los desarrolladores pueden usar iText 7 de forma gratuita bajo la licencia AGPL, lo que es ideal para proyectos de código abierto o uso personal.

Contras:

  • Licencia AGPL para Uso Comercial\ Aunque iText 7 ofrece una versión gratuita, los usuarios comerciales deben cumplir con la licencia AGPL, que obliga a liberar el código fuente de cualquier software que utilice iText 7 o pagar por una licencia comercial.

  • Curva de Aprendizaje Pronunciada\ La API de iText 7 es más compleja y rica en funciones, lo que puede resultar en una curva de aprendizaje más pronunciada en comparación con bibliotecas más simples como IronPDF. Los desarrolladores necesitan familiarizarse con su estructura de documentos de bajo nivel y arquitectura basada en módulos.

  • Pesada para Tareas Simples\ iText 7 puede parecer engorrosa para tareas básicas de PDF, como la creación simple de documentos o conversión básica de HTML a PDF, especialmente cuando se compara con bibliotecas como IronPDF, que simplifican el proceso.

  • Requiere Módulos Externos para HTML a PDF\ La conversión de HTML a PDF en iText 7 solo está disponible a través del módulo adicional pdfhtml, que requiere una instalación separada y puede no manejar el contenido web moderno tan fácilmente como IronPDF.

IronPDF para .NET: Una Potente Biblioteca de PDF

IronPDF es una biblioteca .NET de alto nivel diseñada para simplificar la generación de documentos PDF con un enfoque en la productividad del desarrollador. Es particularmente efectiva para renderizar contenido HTML y estilos, haciéndola ideal para flujos de trabajo modernos de web a PDF.

Características Clave:

  • Crear archivos PDF desde arreglos de bytes y trabajar con documentos PDF sin necesidad de instalar Adobe Reader
  • Renderizado directo de HTML a PDF usando el motor completo de Chromium para crear documentos PDF a partir de contenido HTML
  • Funciona con Vistas MVC, Razor Pages y URLs locales/remotas
  • Soporta archivos de imagen, JavaScript, CSS y diseños responsivos de serie
  • Sintaxis fácil de usar y configuración mínima requerida
  • Licencias perpetuas y sin restricciones AGPL

Instalación de IronPDF

IronPDF también se puede instalar a través de NuGet, ejecutando el siguiente comando en la consola del gestor de paquetes NuGet:

Install-Package IronPdf

Instalando IronPDF a través de la Consola del Gestor de Paquetes

Alternativamente, puedes instalarlo a través del gestor de paquetes NuGet para la pantalla de Solución. Para hacer esto, navega a "Herramientas > Gestor de Paquetes NuGet > Administrar Paquetes NuGet para la Solución".

Menú desplegable de herramientas en Visual Studio

Luego, busca IronPDF y haz clic en "Instalar".

Pantalla del gestor de paquetes NuGet de IronPDF

Después de la instalación, puedes empezar a renderizar páginas HTML completas a PDF en segundos, sin necesidad de módulos adicionales. Soporta CSS moderno, JavaScript e incluso contenido web interactivo sin configuración adicional.

Ejemplo de Código: Crear documentos PDF desde un Arreglo de Bytes con IronPDF

using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.GeneratePdfWithIronPdf();
        // Save the PDF to a file
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] GeneratePdfWithIronPdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdfDoc = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
        return pdfDoc.BinaryData;
    }
}
using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.GeneratePdfWithIronPdf();
        // Save the PDF to a file
        File.WriteAllBytes("output.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] GeneratePdfWithIronPdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdfDoc = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
        return pdfDoc.BinaryData;
    }
}
Imports IronPdf
Imports System.IO

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = pdfGenerator.GeneratePdfWithIronPdf()
		' Save the PDF to a file
		File.WriteAllBytes("output.pdf", pdfBytes)
	End Sub
End Class

Friend Class PdfGenerator
	Public Function GeneratePdfWithIronPdf() As Byte()
		Dim renderer = New ChromePdfRenderer()
		Dim pdfDoc = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF!</h1>")
		Return pdfDoc.BinaryData
	End Function
End Class
$vbLabelText   $csharpLabel

Archivo PDF de salida

Salida de IronPDF

Explicación

  • La declaración using IronPdf importa la biblioteca IronPDF para acceder a todas las clases relacionadas con PDF.
  • var renderer = new ChromePdfRenderer() crea un nuevo renderizador de HTML a PDF potenciado por un motor de Chromium sin cabeza.
  • renderer.RenderHtmlAsPdf(...) convierte la cadena HTML dada en un documento PDF. También puedes pasar rutas de archivos o URLs.
  • pdfDoc.BinaryData devuelve el PDF final como un arreglo de bytes, listo para guardar, transmitir o almacenar en base de datos.

Pros y Contras de IronPDF

Pros:

  • Renderizado HTML a PDF sin Esfuerzo\ Renderiza contenido HTML, CSS y JavaScript directamente en PDFs con estilo completo, incluyendo Bootstrap y fuentes personalizadas, sin necesitar código de diseño complejo o módulos adicionales.

  • Inicio Rápido y API Intuitiva\ Crea archivos PDF completamente estilizados en solo unas pocas líneas de código, con sintaxis limpia y compatibilidad completa con .NET Core y .NET Framework.

  • Soporte Integral para Tecnologías Web\ IronPDF soporta JavaScript, CSS moderno, SVGs y queries de medios, algo con lo que la mayoría de las bibliotecas lidian a menos que usen navegadores sin cabeza como Chromium (lo que IronPDF hace internamente).

  • Gestión Incorporada de Imágenes y Recursos\ Incluye fácilmente imágenes, archivos locales e incluso recupera recursos de URLs remotas sin configuración adicional.

  • Licencias Perpetuas y Sin AGPL\ A diferencia de iText 7, IronPDF ofrece licencias comerciales flexibles sin las restricciones de las obligaciones de código abierto AGPL.

  • Excelente para Vistas MVC y Razor\ Convierte fácilmente Vistas Razor .cshtml en aplicaciones ASP.NET en PDFs imprimibles.

Contras:

  • El Uso Comercial Requiere Licencia\ Aunque hay una prueba gratuita, IronPDF no es de código abierto. Los proyectos con presupuestos ajustados pueden necesitar evaluar los costos de licencia.

  • Tamaño de Paquete Inicial Más Grande\ Dado que incluye un motor Chromium sin cabeza, el paquete NuGet es más pesado que algunas alternativas.

Ejemplos Prácticos de Código Comparados

Los siguientes ejemplos de código en esta sección demuestran estas bibliotecas en acción, durante los cuales compararemos IronPDF y iText 7 utilizando las mismas tareas. Ambas bibliotecas se someterán a los mismos escenarios: generar un PDF desde una URL, renderizar una imagen como PDF, y convertir HTML estilizado a PDF, usando todo el tiempo arreglos de bytes para manejar nuestro contenido PDF. Esto permitirá a los desarrolladores evaluar cómo cada biblioteca se enfrenta a estos casos de uso comunes.

1. Generar un PDF Simple desde una URL usando un Arreglo de Bytes

IronPDF

using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.GeneratePdfFromUrlWithIronPdf();

        // Save the PDF to a file
        File.WriteAllBytes("ironpdf-from-url.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] GeneratePdfFromUrlWithIronPdf()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.WaitForJavaScript(5000);
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

        var pdf = renderer.RenderUrlAsPdf("https://www.apple.com");
        return pdf.BinaryData;
    }
}
using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.GeneratePdfFromUrlWithIronPdf();

        // Save the PDF to a file
        File.WriteAllBytes("ironpdf-from-url.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] GeneratePdfFromUrlWithIronPdf()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.WaitForJavaScript(5000);
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

        var pdf = renderer.RenderUrlAsPdf("https://www.apple.com");
        return pdf.BinaryData;
    }
}
Imports IronPdf
Imports System.IO

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = pdfGenerator.GeneratePdfFromUrlWithIronPdf()

		' Save the PDF to a file
		File.WriteAllBytes("ironpdf-from-url.pdf", pdfBytes)
	End Sub
End Class

Friend Class PdfGenerator
	Public Function GeneratePdfFromUrlWithIronPdf() As Byte()
		Dim renderer = New ChromePdfRenderer()
		renderer.RenderingOptions.EnableJavaScript = True
		renderer.RenderingOptions.WaitForJavaScript(5000)
		renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print

		Dim pdf = renderer.RenderUrlAsPdf("https://www.apple.com")
		Return pdf.BinaryData
	End Function
End Class
$vbLabelText   $csharpLabel

PDF de Salida

Salida de IronPDF de URL a PDF

IronPDF utiliza un motor Chromium sin cabeza para un renderizado preciso al píxel de páginas web con soporte completo de JavaScript y CSS.

iText 7

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using System.Net.Http;
using System.Threading.Tasks;
using iText.Html2pdf;
using System.IO;

class Program
{
    static async Task Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = await pdfGenerator.GeneratePdfFromUrlWithIText7Async();

        // Save the PDF to a file
        File.WriteAllBytes("itext7-from-url.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public async Task<byte[]> GeneratePdfFromUrlWithIText7Async()
    {
        using var httpClient = new HttpClient();
        string html = await httpClient.GetStringAsync("https://www.apple.com");

        using var stream = new MemoryStream();
        HtmlConverter.ConvertToPdf(html, stream);
        return stream.ToArray();
    }
}
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using System.Net.Http;
using System.Threading.Tasks;
using iText.Html2pdf;
using System.IO;

class Program
{
    static async Task Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = await pdfGenerator.GeneratePdfFromUrlWithIText7Async();

        // Save the PDF to a file
        File.WriteAllBytes("itext7-from-url.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public async Task<byte[]> GeneratePdfFromUrlWithIText7Async()
    {
        using var httpClient = new HttpClient();
        string html = await httpClient.GetStringAsync("https://www.apple.com");

        using var stream = new MemoryStream();
        HtmlConverter.ConvertToPdf(html, stream);
        return stream.ToArray();
    }
}
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports System.Net.Http
Imports System.Threading.Tasks
Imports iText.Html2pdf
Imports System.IO

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = Await pdfGenerator.GeneratePdfFromUrlWithIText7Async()

		' Save the PDF to a file
		File.WriteAllBytes("itext7-from-url.pdf", pdfBytes)
	End Function
End Class

Friend Class PdfGenerator
	Public Async Function GeneratePdfFromUrlWithIText7Async() As Task(Of Byte())
		Dim httpClient As New HttpClient()
		Dim html As String = Await httpClient.GetStringAsync("https://www.apple.com")

		Dim stream = New MemoryStream()
		HtmlConverter.ConvertToPdf(html, stream)
		Return stream.ToArray()
	End Function
End Class
$vbLabelText   $csharpLabel

Salida

Salida de iText 7 de URL a PDF

iText 7 obtiene HTML en bruto con HttpClient y lo renderiza usando HtmlConverter, pero no soporta ejecución de JavaScript (según lo confirma la documentación oficial de iText, que recomienda usar Selenium o similar para procesamiento previo de JavaScript) y tiene soporte CSS limitado. Mientras iText7 añadió soporte parcial para flexbox en la versión 7.1.15 (2021), muchas propiedades de CSS3 siguen sin soportarse, particularmente para diseños modernos complejos.

2. Creando un Nuevo Archivo PDF desde una Imagen usando un Arreglo de Bytes

IronPDF

using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreatePdfWithImage();

        // Save the PDF to a file
        File.WriteAllBytes("ironpdf-with-image.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreatePdfWithImage()
    {
        var pdf = ImageToPdfConverter.ImageToPdf("example.png");
        return pdf.BinaryData;
    }
}
using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreatePdfWithImage();

        // Save the PDF to a file
        File.WriteAllBytes("ironpdf-with-image.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreatePdfWithImage()
    {
        var pdf = ImageToPdfConverter.ImageToPdf("example.png");
        return pdf.BinaryData;
    }
}
Imports IronPdf
Imports System.IO

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = pdfGenerator.CreatePdfWithImage()

		' Save the PDF to a file
		File.WriteAllBytes("ironpdf-with-image.pdf", pdfBytes)
	End Sub
End Class

Friend Class PdfGenerator
	Public Function CreatePdfWithImage() As Byte()
		Dim pdf = ImageToPdfConverter.ImageToPdf("example.png")
		Return pdf.BinaryData
	End Function
End Class
$vbLabelText   $csharpLabel

Salida

Salida de IronPDF de imagen a PDF

Generación fácil de imagen a PDF con el herramienta ImageToPdfConverter de IronPDF. Con esto, puedes fácilmente crear archivos PDF a partir de imágenes como archivos PNG o JPGs.

iText 7

using iText.Kernel.Pdf;
using iText.Layout;
using iText.IO.Image;
using iText.Layout.Element;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreatePdfWithImage();

        // Save the PDF to a file
        File.WriteAllBytes("iText-with-image.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreatePdfWithImage()
    {
        using var ms = new MemoryStream();
        using var writer = new PdfWriter(ms);
        using var pdfDoc = new iText.Kernel.Pdf.PdfDocument(writer);
        var document = new Document(pdfDoc);

        var img = new Image(ImageDataFactory.Create("https://itextpdf.com/sites/default/files/2018-11/iText%207%20Product%20software%20-%20webimages_509x339px_V2_iText%207%20Core.png"));
        document.Add(img);
        document.Close();

        return ms.ToArray();
    }
}
using iText.Kernel.Pdf;
using iText.Layout;
using iText.IO.Image;
using iText.Layout.Element;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreatePdfWithImage();

        // Save the PDF to a file
        File.WriteAllBytes("iText-with-image.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreatePdfWithImage()
    {
        using var ms = new MemoryStream();
        using var writer = new PdfWriter(ms);
        using var pdfDoc = new iText.Kernel.Pdf.PdfDocument(writer);
        var document = new Document(pdfDoc);

        var img = new Image(ImageDataFactory.Create("https://itextpdf.com/sites/default/files/2018-11/iText%207%20Product%20software%20-%20webimages_509x339px_V2_iText%207%20Core.png"));
        document.Add(img);
        document.Close();

        return ms.ToArray();
    }
}
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.IO.Image
Imports iText.Layout.Element
Imports System.IO

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = pdfGenerator.CreatePdfWithImage()

		' Save the PDF to a file
		File.WriteAllBytes("iText-with-image.pdf", pdfBytes)
	End Sub
End Class

Friend Class PdfGenerator
	Public Function CreatePdfWithImage() As Byte()
		Dim ms = New MemoryStream()
		Dim writer = New PdfWriter(ms)
		Dim pdfDoc = New iText.Kernel.Pdf.PdfDocument(writer)
		Dim document As New Document(pdfDoc)

		Dim img = New Image(ImageDataFactory.Create("https://itextpdf.com/sites/default/files/2018-11/iText%207%20Product%20software%20-%20webimages_509x339px_V2_iText%207%20Core.png"))
		document.Add(img)
		document.Close()

		Return ms.ToArray()
	End Function
End Class
$vbLabelText   $csharpLabel

Salida

Salida de PDF de iText 7 con imagen

Creación manual de diseño de documento e inserción explícita de imagen usando ImageDataFactory.

3. Convertir Contenido HTML Estilizado a PDF usando un Arreglo de Bytes

IronPDF

using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreateStyledPdf();

        // Save the PDF to a file
        File.WriteAllBytes("ironpdf-styled-html.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreateStyledPdf()
    {
        string html = @"
        <html>
            <head>
                <style>
                    body { 
                        background-color: #f0f0f0; 
                        margin: 20px; 
                        padding: 20px; 
                        border-radius: 5px; 
                        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    }
                    h1 { 
                        color: navy;
                        font-size: 32px;   
                        text-align: center;
                       }
                    p { 
                        font-size: 16px; 
                        font-weight: bold;
                      }
                </style>
            </head>
            <body>
                <h1>Welcome to IronPDF</h1>
                <p>This is a simple PDF document generated using IronPDF.</p>
            </body>
        </html>";

        var pdf = new ChromePdfRenderer().RenderHtmlAsPdf(html);
        return pdf.BinaryData;
    }
}
using IronPdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreateStyledPdf();

        // Save the PDF to a file
        File.WriteAllBytes("ironpdf-styled-html.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreateStyledPdf()
    {
        string html = @"
        <html>
            <head>
                <style>
                    body { 
                        background-color: #f0f0f0; 
                        margin: 20px; 
                        padding: 20px; 
                        border-radius: 5px; 
                        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    }
                    h1 { 
                        color: navy;
                        font-size: 32px;   
                        text-align: center;
                       }
                    p { 
                        font-size: 16px; 
                        font-weight: bold;
                      }
                </style>
            </head>
            <body>
                <h1>Welcome to IronPDF</h1>
                <p>This is a simple PDF document generated using IronPDF.</p>
            </body>
        </html>";

        var pdf = new ChromePdfRenderer().RenderHtmlAsPdf(html);
        return pdf.BinaryData;
    }
}
Imports IronPdf
Imports System.IO

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = pdfGenerator.CreateStyledPdf()

		' Save the PDF to a file
		File.WriteAllBytes("ironpdf-styled-html.pdf", pdfBytes)
	End Sub
End Class

Friend Class PdfGenerator
	Public Function CreateStyledPdf() As Byte()
		Dim html As String = "
        <html>
            <head>
                <style>
                    body { 
                        background-color: #f0f0f0; 
                        margin: 20px; 
                        padding: 20px; 
                        border-radius: 5px; 
                        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    }
                    h1 { 
                        color: navy;
                        font-size: 32px;   
                        text-align: center;
                       }
                    p { 
                        font-size: 16px; 
                        font-weight: bold;
                      }
                </style>
            </head>
            <body>
                <h1>Welcome to IronPDF</h1>
                <p>This is a simple PDF document generated using IronPDF.</p>
            </body>
        </html>"

		Dim pdf = (New ChromePdfRenderer()).RenderHtmlAsPdf(html)
		Return pdf.BinaryData
	End Function
End Class
$vbLabelText   $csharpLabel

Salida

Salida de HTML estilizado a PDF de IronPDF

IronPDF soporta completamente CSS en etiquetas u hojas de estilo externas gracias a su motor Chromium.

iText 7 + pdfHTML

using iText.Kernel.Pdf;
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreateStyledPdf();

        // Save the new document to the specified file location
        File.WriteAllBytes("iText-styled-html.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreateStyledPdf()
    {
        string html = @"
        <html>
            <head>
                <style>
                    body { 
                        background-color: #f0f0f0; 
                        margin: 20px; 
                        padding: 20px; 
                        border-radius: 5px; 
                        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    }
                    h1 { 
                        color: navy;
                        font-size: 32px;   
                        text-align: center;
                       }
                    p { 
                        font-size: 16px; 
                        font-weight: bold;
                      }
                </style>
            </head>
            <body>
                <h1>Welcome to iText 7</h1>
                <p>This is a simple PDF document generated using iText 7 and pdfHTML.</p>
            </body>
        </html>";

        using var ms = new MemoryStream();
        ConverterProperties properties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)), ms, properties);
        return ms.ToArray();
    }
}
using iText.Kernel.Pdf;
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        var pdfGenerator = new PdfGenerator();
        byte[] pdfBytes = pdfGenerator.CreateStyledPdf();

        // Save the new document to the specified file location
        File.WriteAllBytes("iText-styled-html.pdf", pdfBytes);
    }
}

class PdfGenerator
{
    public byte[] CreateStyledPdf()
    {
        string html = @"
        <html>
            <head>
                <style>
                    body { 
                        background-color: #f0f0f0; 
                        margin: 20px; 
                        padding: 20px; 
                        border-radius: 5px; 
                        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    }
                    h1 { 
                        color: navy;
                        font-size: 32px;   
                        text-align: center;
                       }
                    p { 
                        font-size: 16px; 
                        font-weight: bold;
                      }
                </style>
            </head>
            <body>
                <h1>Welcome to iText 7</h1>
                <p>This is a simple PDF document generated using iText 7 and pdfHTML.</p>
            </body>
        </html>";

        using var ms = new MemoryStream();
        ConverterProperties properties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)), ms, properties);
        return ms.ToArray();
    }
}
Imports iText.Kernel.Pdf
Imports iText.Html2pdf
Imports System.IO

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfGenerator As New PdfGenerator()
		Dim pdfBytes() As Byte = pdfGenerator.CreateStyledPdf()

		' Save the new document to the specified file location
		File.WriteAllBytes("iText-styled-html.pdf", pdfBytes)
	End Sub
End Class

Friend Class PdfGenerator
	Public Function CreateStyledPdf() As Byte()
		Dim html As String = "
        <html>
            <head>
                <style>
                    body { 
                        background-color: #f0f0f0; 
                        margin: 20px; 
                        padding: 20px; 
                        border-radius: 5px; 
                        box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
                    }
                    h1 { 
                        color: navy;
                        font-size: 32px;   
                        text-align: center;
                       }
                    p { 
                        font-size: 16px; 
                        font-weight: bold;
                      }
                </style>
            </head>
            <body>
                <h1>Welcome to iText 7</h1>
                <p>This is a simple PDF document generated using iText 7 and pdfHTML.</p>
            </body>
        </html>"

		Dim ms = New MemoryStream()
		Dim properties As New ConverterProperties()
		HtmlConverter.ConvertToPdf(New MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)), ms, properties)
		Return ms.ToArray()
	End Function
End Class
$vbLabelText   $csharpLabel

Salida

Salida de HTML estilizado a PDF de iText 7

Requiere la instalación del complemento de pago pdfHTML para manejar tareas de conversión de HTML.

Resumen de la Comparación

Característica IronPDF iText 7 (con pdfHTML)
Renderizar URL a PDF Renderizado completo de Chromium Obtener HTML, sin soporte nativo de JS
Agregar Imagen Incrustar vía HTML o su herramienta dedicada de estampado de imágenes Fábrica de imágenes manual
Renderizar HTML Estilizado Soporte CSS completo Soporte CSS solo a través de pdfHTML
Devuelve Arreglo de Bytes
Complejidad de Configuración Simple Moderado (diseño manual)
Calidad de Salida Precisa al píxel Buena pero estática

Conclusión: ¿Qué Biblioteca .NET Deberías Elegir?

Choosing between IronPDF and iText 7 depends on your project’s needs — but when it comes to developer experience, ease of use, and modern rendering accuracy, IronPDF clearly stands out.

If you're working with dynamic HTML content, web rendering, or need to create PDF files from URLs with full JavaScript and CSS support, IronPDF's Chromium-based engine delivers unmatched fidelity. Su API intuitiva y configuración rápida lo hacen ideal para desarrollo rápido y uso en producción real, especialmente cuando se trabaja con arreglos de bytes, flujos de archivo o generación de PDF basada en web.

Por otro lado, iText 7 es una biblioteca poderosa y bien respetada con un enfoque más tradicional y basado en diseño. Ofrece control sólido sobre la estructura del documento y es excelente para desarrolladores que necesitan manipulación detallada, pero viene con una curva de aprendizaje más pronunciada y carece de capacidades modernas de renderizado HTML.

Conclusión:

  • ¿Quieres salida precisa al píxel de contenido web moderno, HTML estilizado o prototipo rápido? Elige IronPDF.
  • ¿Necesitas herramientas de creación de PDF de bajo nivel con control granular? iText 7 podría ser la elección correcta.

¿Listo para comenzar con IronPDF?\ Descarga la prueba gratuita y mira lo fácil que es crear PDFs profesionales basados en arreglos de bytes en C# con solo unas pocas líneas de código.

Por favor notaiText 7 es una marca registrada de su respectivo propietario. Este sitio no está afiliado, respaldado, ni patrocinado por iText 7. Todos los nombres de productos, logotipos y marcas son propiedad de sus respectivos dueños.
Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.)}]

Preguntas Frecuentes

¿Cómo puedo convertir una matriz de bytes a un PDF en C#?

Puede usar IronPDF para convertir una matriz de bytes a un PDF en C#. Simplemente cargue la matriz de bytes en un documento IronPDF usando el método `PdfDocument.FromBytes`, que analizará los datos y generará un documento PDF.

¿Cuáles son los beneficios de usar IronPDF para la conversión de HTML a PDF?

IronPDF sobresale en convertir HTML a PDF debido a su uso de un motor Chromium sin cabeza, que admite CSS y JavaScript modernos. Esto lo hace ideal para renderizar contenido web dinámico en documentos PDF con precisión de píxel.

¿Cuáles son las principales ventajas de usar IronPDF sobre iText 7 para la generación de PDFs?

IronPDF ofrece una API más simple y una configuración más rápida para proyectos que necesitan convertir HTML a PDF, con pleno soporte para CSS y JavaScript. Es especialmente adecuado para aplicaciones que requieren desarrollo rápido e integración de contenido web.

¿Cómo maneja iText 7 el cumplimiento de PDF?

iText 7 está diseñado para industrias con altos requerimientos de cumplimiento, y soporta estándares como PDF/A, PDF/UA y PDF/X. Proporciona un control robusto sobre la creación de PDFs, haciéndolo adecuado para aplicaciones donde el cumplimiento es crítico.

¿Cuál es el proceso para instalar IronPDF en un proyecto .NET?

Para instalar IronPDF, puede usar NuGet Package Manager en Visual Studio. Ejecute el comando `Install-Package IronPdf` en la Consola del Administrador de Paquetes para agregarlo a su proyecto.

¿Puede IronPDF crear PDFs a partir de vistas ASP.NET?

Sí, IronPDF puede renderizar vistas ASP.NET directamente en documentos PDF. Esta característica permite a los desarrolladores convertir páginas web con diseños y estilos complejos en PDFs fácilmente.

¿Qué tipos de aplicaciones se benefician más de usar IronPDF?

Las aplicaciones que necesitan convertir contenido web dinámico, como informes y facturas, en PDFs se benefician más de usar IronPDF. Su rápida configuración y soporte para tecnología web lo hacen ideal para proyectos que necesitan actualizaciones frecuentes y un diseño moderno.

¿Cómo afecta la arquitectura modular de iText 7 su uso?

La arquitectura modular de iText 7 permite agregar funcionalidades específicas de PDF, como la conversión de HTML o la firma digital, según sea necesario. Esto proporciona flexibilidad pero puede requerir aprendizaje adicional e instalación de cada módulo.

¿Cuáles son las diferencias de licencias entre IronPDF y iText 7?

IronPDF ofrece licencias perpetuas adecuadas para aplicaciones comerciales, sin restricciones de AGPL. En contraste, iText 7 está disponible bajo la licencia AGPL para proyectos de código abierto, requiriendo una licencia paga para uso comercial.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más