Saltar al pie de página
USANDO IRONPDF

Cómo convertir un PDF a un arreglo de bytes en C#

Full Comparison

Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.

View Full Comparison

La conversión de vistas ASP.NET MVC a documentos PDF es un requisito fundamental en las aplicaciones web modernas en España. Ya sea que esté generando facturas electrónicas conformes con VERI*FACTU, documentos Facturae para el FACe, informes bajo el SII de la AEAT, o certificados firmados digitalmente con sello de tiempo, el desafío es claro: ¿cómo transformar las vistas de Razor en archivos PDF profesionales que preserven el formato, el estilo y el cumplimiento normativo? Esta guía compara la biblioteca heredada iTextSharp con IronPDF, la solución moderna impulsada por Chromium, para que pueda elegir la herramienta adecuada para su flujo de trabajo de generación de PDF en el contexto regulatorio español.

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 1 - IronPDF

¿Por qué necesita convertir vistas MVC a PDF en el entorno normativo español?

Las empresas dependen de la generación de PDF para innumerables operaciones críticas. Los sistemas de facturación necesitan documentos a prueba de manipulaciones conformes con VERI*FACTU y el esquema Facturae 3.2.2. Los departamentos de RRHH generan certificados y contratos de trabajo que deben incorporar firma digital PAdES conforme a eIDAS. Los equipos de ventas elaboran presupuestos y propuestas. Las plataformas educativas expiden certificados de finalización. Cada escenario exige una generación de PDF en el servidor que mantenga un formato coherente en todos los dispositivos y plataformas.

En España, el marco normativo impone requisitos específicos sobre la generación de documentos electrónicos. La AEAT (Agencia Estatal de Administración Tributaria) regula el sistema VERI*FACTU de registro verificable de facturas, y la Ley Crea y Crece amplía la obligatoriedad de la facturación electrónica al ámbito B2B. Las empresas también deben cumplir con la LOPDGDD (Ley Orgánica 3/2018 de Protección de Datos y Garantía de los Derechos Digitales) y las directrices de la AEPD al incluir datos personales en sus PDFs. Según la documentación de ASP.NET Core, las vistas Razor proporcionan un excelente sistema de plantillas para generar contenido dinámico que luego se puede convertir a PDF. La pregunta clave es qué biblioteca le ofrece la solución más precisa, sostenible y legalmente adecuada.

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 2 - Características

¿Cómo gestiona iTextSharp la conversión de MVC a PDF?

iTextSharp ha sido un elemento básico en la generación de PDF .NET durante más de una década. Originalmente portado de la biblioteca iText de Java, proporciona un control de bajo nivel sobre la creación de PDF. Sin embargo, su enfoque de la conversión a HTML muestra su antigüedad, sobre todo cuando se trata de contenidos web modernos con requisitos de firma digital PAdES o campos de metadatos para el sistema VERI*FACTU.

Instalación de iTextSharp

Para agregar iTextSharp a su proyecto ASP.NET Core MVC, instale el paquete NuGet mediante la Consola del Administrador de paquetes:

Install-Package iTextSharp
Install-Package iTextSharp
SHELL

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 3 - Instalar iTextSharp

Implementación básica con iTextSharp

A continuación se muestra un ejemplo completo que ilustra cómo convertir una vista MVC a PDF utilizando la clase XMLWorkerHelper de iTextSharp en su proyecto ASP.NET MVC:

using iTextSharp.text;
using iTextSharp.tool.xml;
using iTextSharp.text.pdf;
using System.IO;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult GeneratePDF()
    {
        // Create a simple invoice HTML
        string invoiceHtml = @"
            <h1>Invoice #1001</h1>
            <p>Date: " + DateTime.Now.ToString("MM/dd/yyyy") + @"</p>
            <table border='1'>
                <tr><th>Item</th><th>Price</th></tr>
                <tr><td>Product A</td><td>$99.99</td></tr>
                <tr><td>Product B</td><td>$149.99</td></tr>
            </table>
            <p><strong>Total: $249.98</strong></p>";

        // Create PDF document using iTextSharp
        using var stream = new MemoryStream();
        var document = new Document(PageSize.A4);
        PdfWriter writer = PdfWriter.GetInstance(document, stream);
        document.Open();

        using (var srHtml = new StringReader(invoiceHtml))
        {
            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, srHtml);
        }

        document.Close();

        // Return the PDF file
        return new FileContentResult(stream.ToArray(), "application/pdf")
        {
            FileDownloadName = "invoice.pdf"
        };
    }
}
using iTextSharp.text;
using iTextSharp.tool.xml;
using iTextSharp.text.pdf;
using System.IO;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult GeneratePDF()
    {
        // Create a simple invoice HTML
        string invoiceHtml = @"
            <h1>Invoice #1001</h1>
            <p>Date: " + DateTime.Now.ToString("MM/dd/yyyy") + @"</p>
            <table border='1'>
                <tr><th>Item</th><th>Price</th></tr>
                <tr><td>Product A</td><td>$99.99</td></tr>
                <tr><td>Product B</td><td>$149.99</td></tr>
            </table>
            <p><strong>Total: $249.98</strong></p>";

        // Create PDF document using iTextSharp
        using var stream = new MemoryStream();
        var document = new Document(PageSize.A4);
        PdfWriter writer = PdfWriter.GetInstance(document, stream);
        document.Open();

        using (var srHtml = new StringReader(invoiceHtml))
        {
            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, srHtml);
        }

        document.Close();

        // Return the PDF file
        return new FileContentResult(stream.ToArray(), "application/pdf")
        {
            FileDownloadName = "invoice.pdf"
        };
    }
}
Imports iTextSharp.text
Imports iTextSharp.tool.xml
Imports iTextSharp.text.pdf
Imports System.IO

Public Class HomeController
    Inherits Controller

    Public Function Index() As ActionResult
        Return View()
    End Function

    Public Function GeneratePDF() As ActionResult
        ' Create a simple invoice HTML
        Dim invoiceHtml As String = "
            <h1>Invoice #1001</h1>
            <p>Date: " & DateTime.Now.ToString("MM/dd/yyyy") & "</p>
            <table border='1'>
                <tr><th>Item</th><th>Price</th></tr>
                <tr><td>Product A</td><td>$99.99</td></tr>
                <tr><td>Product B</td><td>$149.99</td></tr>
            </table>
            <p><strong>Total: $249.98</strong></p>"

        ' Create PDF document using iTextSharp
        Using stream As New MemoryStream()
            Dim document As New Document(PageSize.A4)
            Dim writer As PdfWriter = PdfWriter.GetInstance(document, stream)
            document.Open()

            Using srHtml As New StringReader(invoiceHtml)
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, srHtml)
            End Using

            document.Close()

            ' Return the PDF file
            Return New FileContentResult(stream.ToArray(), "application/pdf") With {
                .FileDownloadName = "invoice.pdf"
            }
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Este ejemplo crea un documento PDF básico a partir de contenido HTML. La clase XMLWorkerHelper procesa la cadena HTML y añade elementos al documento PDF utilizando el modelo de objetos. El PdfWriter se encarga del proceso de generación del PDF, mientras que el Document gestiona la estructura de la página.

Resultado

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 4 - Salida en PDF

¿Cuáles son las principales limitaciones de iTextSharp para proyectos en España?

La clase XMLWorkerHelper admite etiquetas HTML básicas y CSS en línea. Las propiedades CSS3 modernas, los diseños de flexbox y los sistemas de cuadrícula no se representan. El contenido dependiente de JavaScript desaparece por completo. Se ignoran estilos complejos como degradados, sombras y transformaciones. Incluso las clases Bootstrap estándar no se pueden aplicar, lo que hace que las vistas cuidadosamente diseñadas parezcan simples y poco profesionales.

Muchos desarrolladores han informado de estas limitaciones en Stack Overflow, lo que provoca frustración al intentar convertir vistas MVC a PDF con iTextSharp.

Quizá lo más preocupante para los ISV y desarrolladores españoles sea el modelo de licencias de iTextSharp. La biblioteca utiliza la licencia AGPL, que exige que toda la aplicación sea de código abierto si se utiliza la versión gratuita. Esto significa que cualquier empresa que integre iTextSharp en un producto de software distribuido a terceros queda obligada a publicar íntegramente el código fuente de su aplicación bajo AGPL, incluyendo su lógica de negocio propietaria, sus integraciones con sistemas de facturación VERI*FACTU o TicketBAI (en los territorios forales de Bizkaia, Gipuzkoa y Araba del País Vasco, así como NaTicket en Navarra), o cualquier otra ventaja competitiva. Las licencias comerciales comienzan en varios miles de dólares por año, lo que las hace prohibitivamente caras para muchas empresas. Como se analiza en la documentación .NET de Microsoft, elegir bibliotecas con licencias adecuadas es fundamental para los proyectos comerciales.

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 5 - IronPDF frente a iTextSharp: vista MVC a PDF

¿Cómo convertir vistas MVC a PDF con facturas Facturae y soporte VERI*FACTU usando IronPDF?

IronPDF representa un enfoque moderno para la generación de PDF en ASP.NET Core MVC. Basado en el motor de renderizado Chromium, convierte HTML a PDF exactamente como aparece en Google Chrome, conservando todo el estilo, la ejecución de JavaScript y los elementos de diseño adaptable. Para el mercado español, esto resulta especialmente valioso al generar facturas electrónicas con los campos obligatorios exigidos por Facturae, incorporar el hash VERI*FACTU en el encabezado del documento, o producir PDFs con firma digital PAdES mediante el certificado FNMT-RCM.

¿Cómo se instala IronPDF?

Agregue IronPDF a su proyecto a través de la consola del Administrador de paquetes NuGet:

Install-Package IronPdf

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 6 - Instalación

Implementación con IronPDF: factura electrónica española con IVA 21%

La misma factura creada anteriormente, ahora adaptada al formato de factura electrónica española con NIF/CIF, importes en euros con IVA 21% y referencia VERI*FACTU, usando CSS moderno y renderizado HTML5 completo con ChromePdfRenderer de IronPDF:

using IronPdf;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult GenerateModernPDF()
    {
        // Create a styled Spanish e-invoice HTML (Facturae-compatible)
        string invoiceHtml = @"
            <style>
                body { font-family: 'Segoe UI', Arial; padding: 40px; }
                .invoice-header {
                    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                    color: white;
                    padding: 30px;
                    border-radius: 10px;
                }
                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin: 20px 0;
                }
                th {
                    background-color: #f3f4f6;
                    padding: 12px;
                    text-align: left;
                }
                td {
                    padding: 12px;
                    border-bottom: 1px solid #e5e7eb;
                }
                .total {
                    font-size: 24px;
                    color: #10b981;
                    text-align: right;
                    margin-top: 20px;
                }
            </style>
            <div class='invoice-header'>
                <h1>Factura N.º FAC-2026-00187</h1>
                <p>Fecha: " + DateTime.Now.ToString("dd/MM/yyyy") + @"</p>
                <p>Emisor NIF: B-28.456.789 | Receptor CIF: A-12.345.678</p>
            </div>
            <table>
                <tr><th>Concepto</th><th>Cantidad</th><th>Base (€)</th><th>IVA 21%</th><th>Total (€)</th></tr>
                <tr><td>Licencia software</td><td>1</td><td>1.024,00</td><td>215,04</td><td>1.239,04</td></tr>
                <tr><td>Servicios implantación</td><td>2</td><td>512,00</td><td>107,52</td><td>619,52</td></tr>
            </table>
            <div class='total'>Total factura: 1.858,56 €</div>
            <p>Certificado FNMT-RCM | Ref. VERI*FACTU AEAT: FAC-2026-00187-ES</p>";

        // Use Chromium engine for rendering
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);

        // Set content disposition for download
        Response.Headers.Append("Content-Disposition", "attachment; filename=factura_FAC-2026-00187.pdf");

        // Return the PDF file with binary data
        return new FileContentResult(pdf.BinaryData, "application/pdf");
    }
}
using IronPdf;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult GenerateModernPDF()
    {
        // Create a styled Spanish e-invoice HTML (Facturae-compatible)
        string invoiceHtml = @"
            <style>
                body { font-family: 'Segoe UI', Arial; padding: 40px; }
                .invoice-header {
                    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                    color: white;
                    padding: 30px;
                    border-radius: 10px;
                }
                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin: 20px 0;
                }
                th {
                    background-color: #f3f4f6;
                    padding: 12px;
                    text-align: left;
                }
                td {
                    padding: 12px;
                    border-bottom: 1px solid #e5e7eb;
                }
                .total {
                    font-size: 24px;
                    color: #10b981;
                    text-align: right;
                    margin-top: 20px;
                }
            </style>
            <div class='invoice-header'>
                <h1>Factura N.º FAC-2026-00187</h1>
                <p>Fecha: " + DateTime.Now.ToString("dd/MM/yyyy") + @"</p>
                <p>Emisor NIF: B-28.456.789 | Receptor CIF: A-12.345.678</p>
            </div>
            <table>
                <tr><th>Concepto</th><th>Cantidad</th><th>Base (€)</th><th>IVA 21%</th><th>Total (€)</th></tr>
                <tr><td>Licencia software</td><td>1</td><td>1.024,00</td><td>215,04</td><td>1.239,04</td></tr>
                <tr><td>Servicios implantación</td><td>2</td><td>512,00</td><td>107,52</td><td>619,52</td></tr>
            </table>
            <div class='total'>Total factura: 1.858,56 €</div>
            <p>Certificado FNMT-RCM | Ref. VERI*FACTU AEAT: FAC-2026-00187-ES</p>";

        // Use Chromium engine for rendering
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);

        // Set content disposition for download
        Response.Headers.Append("Content-Disposition", "attachment; filename=factura_FAC-2026-00187.pdf");

        // Return the PDF file with binary data
        return new FileContentResult(pdf.BinaryData, "application/pdf");
    }
}
Imports IronPdf

Public Class HomeController
    Inherits Controller

    Public Function Index() As ActionResult
        Return View()
    End Function

    Public Function GenerateModernPDF() As ActionResult
        ' Create a styled Spanish e-invoice HTML (Facturae-compatible)
        Dim invoiceHtml As String = "
            <style>
                body { font-family: 'Segoe UI', Arial; padding: 40px; }
                .invoice-header {
                    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                    color: white;
                    padding: 30px;
                    border-radius: 10px;
                }
                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin: 20px 0;
                }
                th {
                    background-color: #f3f4f6;
                    padding: 12px;
                    text-align: left;
                }
                td {
                    padding: 12px;
                    border-bottom: 1px solid #e5e7eb;
                }
                .total {
                    font-size: 24px;
                    color: #10b981;
                    text-align: right;
                    margin-top: 20px;
                }
            </style>
            <div class='invoice-header'>
                <h1>Factura N.º FAC-2026-00187</h1>
                <p>Fecha: " & DateTime.Now.ToString("dd/MM/yyyy") & "</p>
                <p>Emisor NIF: B-28.456.789 | Receptor CIF: A-12.345.678</p>
            </div>
            <table>
                <tr><th>Concepto</th><th>Cantidad</th><th>Base (€)</th><th>IVA 21%</th><th>Total (€)</th></tr>
                <tr><td>Licencia software</td><td>1</td><td>1.024,00</td><td>215,04</td><td>1.239,04</td></tr>
                <tr><td>Servicios implantación</td><td>2</td><td>512,00</td><td>107,52</td><td>619,52</td></tr>
            </table>
            <div class='total'>Total factura: 1.858,56 €</div>
            <p>Certificado FNMT-RCM | Ref. VERI*FACTU AEAT: FAC-2026-00187-ES</p>"

        ' Use Chromium engine for rendering
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(invoiceHtml)

        ' Set content disposition for download
        Response.Headers.Append("Content-Disposition", "attachment; filename=factura_FAC-2026-00187.pdf")

        ' Return the PDF file with binary data
        Return New FileContentResult(pdf.BinaryData, "application/pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

El ChromePdfRenderer convierte el HTML exactamente como lo mostraría Chrome. Los fondos degradados, las fuentes modernas y el estilo sofisticado se reproducen con precisión. El ejemplo muestra NIF del emisor (B-28.456.789), CIF del receptor (A-12.345.678), importes en formato español (1.239,04 € con IVA al 21%) y la referencia VERI*FACTU requerida por la AEAT. El renderizador maneja propiedades CSS complejas que iTextSharp no puede procesar. Para la transmisión de la factura al FACe (Punto General de Entrada de Facturas Electrónicas), deberá complementar el PDF con el fichero XML Facturae firmado digitalmente con certificado FNMT-RCM.

Resultado

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 7 - Salida de IronPDF

Comienza tu prueba gratuita y experimenta la generación moderna de PDF con el motor de renderizado impulsado por Chrome.

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 8 - Compatibilidad multiplataforma

¿Cómo elegir entre estas dos bibliotecas PDF para proyectos en España?

Al comparar iTextSharp y IronPDF para la conversión de vistas .NET MVC, varios factores diferencian claramente estas bibliotecas en cuanto a calidad de representación, experiencia del desarrollador y licencias. Para empresas en España que generan documentos bajo el sistema VERI*FACTU o Facturae, la elección resulta especialmente relevante.

Comparación de características

Comparación de funciones de iTextSharp vs. IronPDF
Función iTextSharp IronPDF
Compatibilidad con HTML5 Limitado Completo
Representación CSS3 Solo básico Completo
Ejecución de JavaScript No
Compatibilidad con Flexbox/Grid No
Compatibilidad con Bootstrap Parcial Completo
Firma digital PAdES/eIDAS Manual/Complejo Integrado
Gráficos SVG No
Diseño responsivo No
Complejidad de la API De bajo nivel De alto nivel

Consideraciones sobre la licencia para ISV españoles

La diferencia de licencias entre estas bibliotecas afecta significativamente al desarrollo comercial en España. La licencia AGPL de iTextSharp crea obligaciones legales que muchas empresas no pueden aceptar. El uso de la versión libre (FOSS/código abierto) requiere que toda la aplicación sea de código abierto, incluyendo la lógica empresarial propietaria y las integraciones con sistemas de facturación VERI*FACTU o TicketBAI. Esta restricción hace que iTextSharp no sea adecuado para la mayoría de los proyectos comerciales, a menos que se adquiera una costosa licencia comercial.

IronPDF ofrece licencias comerciales sencillas a partir de $999 para un solo desarrollador. La licencia incluye un año de actualizaciones y soporte, sin obligación de abrir la aplicación. Este modelo de precios transparente se ajusta a los presupuestos típicos de desarrollo de software, lo que hace que la generación profesional de PDF sea accesible para empresas de todos los tamaños en España que necesiten generar documentos Facturae, SII o VERI*FACTU.

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 9 - Licencias

Análisis de la calidad de los resultados

La diferencia en la calidad de la representación se aprecia inmediatamente al comparar los resultados. iTextSharp produce PDF básicos que se asemejan a documentos de principios de la década de 2000. Las tablas carecen del estilo adecuado, las fuentes se ajustan a los estándares del sistema y los elementos de diseño modernos desaparecen por completo.

IronPDF genera archivos PDF con píxeles perfectos que se adaptan a su diseño web. Los degradados se representan con precisión, las fuentes personalizadas se muestran correctamente y los diseños complejos mantienen su estructura. El motor Chromium garantiza que sus PDF se vean idénticos a la vista web, preservando la identidad de marca y la apariencia profesional en todos los documentos generados — incluidas las facturas electrónicas Facturae o los informes del SII de la AEAT.

¿Qué funciones avanzadas ofrece el renderizador de PDF?

Más allá de la conversión HTML básica, IronPDF ofrece funciones de nivel empresarial que aceleran la generación de PDF profesionales. La documentación completa de la API demuestra las amplias capacidades de la biblioteca para convertir vistas MVC a PDF.

Cabeceras y pies de página

Añade encabezados y pies de página profesionales con contenido dinámico:

var renderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        HtmlHeader = new HtmlHeaderFooter
        {
            MaxHeight = 25,
            HtmlFragment = "<div style='text-align: center'>Company Name</div>"
        },
        HtmlFooter = new HtmlHeaderFooter
        {
            MaxHeight = 20,
            HtmlFragment = "<center>Page {page} of {total-pages}</center>"
        }
    }
};
var renderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        HtmlHeader = new HtmlHeaderFooter
        {
            MaxHeight = 25,
            HtmlFragment = "<div style='text-align: center'>Company Name</div>"
        },
        HtmlFooter = new HtmlHeaderFooter
        {
            MaxHeight = 20,
            HtmlFragment = "<center>Page {page} of {total-pages}</center>"
        }
    }
};
Dim renderer = New ChromePdfRenderer With {
    .RenderingOptions = New ChromePdfRenderOptions With {
        .HtmlHeader = New HtmlHeaderFooter With {
            .MaxHeight = 25,
            .HtmlFragment = "<div style='text-align: center'>Company Name</div>"
        },
        .HtmlFooter = New HtmlHeaderFooter With {
            .MaxHeight = 20,
            .HtmlFragment = "<center>Page {page} of {total-pages}</center>"
        }
    }
}
$vbLabelText   $csharpLabel

Esta configuración añade coherencia de marca a todas las páginas. Los marcadores de posición {page} y {total-pages} se rellenan automáticamente con los valores correctos, lo que garantiza una paginación precisa en todo el documento. Para obtener más opciones de configuración, consulte la guía de encabezados y pies de página.

Seguridad y cifrado para cumplimiento LOPDGDD

Proteja documentos confidenciales con contraseñas y permisos, cumpliendo con las medidas de seguridad exigidas por la LOPDGDD y supervisadas por la AEPD para el tratamiento de datos personales en documentos electrónicos:

var pdf = renderer.RenderHtmlAsPdf(html);

// Add password protection
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
var pdf = renderer.RenderHtmlAsPdf(html);

// Add password protection
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
Dim pdf = renderer.RenderHtmlAsPdf(html)

' Add password protection
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"

' Set permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
$vbLabelText   $csharpLabel

Estas opciones de seguridad impiden el acceso no autorizado y controlan la forma en que los destinatarios pueden interactuar con sus PDF. Puede restringir la impresión, la copia y la edición manteniendo el control total del propietario. Obtenga más información en la documentación de seguridad en PDF.

Resultado

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 10 - Salida de PDF segura

Manejo de campos de formulario

IronPDF convierte formularios HTML en formularios PDF interactivos sin necesidad de herramientas adicionales:

string formHtml = @"
    <form>
        <label>Name:</label>
        <input type='checkbox'> Accept Terms
        <select name='country'>
            <option>USA</option>
            <option>Canada</option>
        </select>
    </form>";

var pdf = renderer.RenderHtmlAsPdf(formHtml);
string formHtml = @"
    <form>
        <label>Name:</label>
        <input type='checkbox'> Accept Terms
        <select name='country'>
            <option>USA</option>
            <option>Canada</option>
        </select>
    </form>";

var pdf = renderer.RenderHtmlAsPdf(formHtml);
Imports System

Dim formHtml As String = "
    <form>
        <label>Name:</label>
        <input type='checkbox'> Accept Terms
        <select name='country'>
            <option>USA</option>
            <option>Canada</option>
        </select>
    </form>"

Dim pdf = renderer.RenderHtmlAsPdf(formHtml)
$vbLabelText   $csharpLabel

El PDF resultante mantiene la interactividad del formulario, permitiendo a los usuarios rellenar los campos directamente en su lector de PDF. Esta función elimina la necesidad de herramientas de creación de formularios independientes. Explore la documentación de formularios para obtener más opciones.

Resultado

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 11 - Salida del formulario

¿Cómo resolver problemas comunes de generación de PDF?

Incluso con bibliotecas modernas, ciertos desafíos requieren soluciones específicas para garantizar una salida PDF óptima. Los siguientes patrones abordan los problemas más frecuentes que encuentran los desarrolladores al convertir vistas MVC a PDF.

Optimización de renderizado CSS

Para obtener mejores resultados con CSS complejo al convertir archivos HTML a formato PDF, utilice consultas de medios de impresión:

renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
$vbLabelText   $csharpLabel

Esta configuración aplica reglas CSS específicas de impresión, optimizando los diseños para la salida en PDF en lugar de la visualización en pantalla. La guía de tipos de medios CSS explica opciones de renderizado adicionales.

Tiempo de ejecución de JavaScript

Al convertir contenido dinámico, espere a que se complete la ejecución de JavaScript antes de capturar el PDF:

renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay = 500; // milliseconds
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay = 500; // milliseconds
$vbLabelText   $csharpLabel

Esta configuración garantiza que las llamadas AJAX se completen y las manipulaciones DOM finalicen antes de que comience la generación de PDF. Para bibliotecas de gráficos y otro contenido con gran carga asincrónica, es posible que deba aumentar el valor de retraso.

Resultado

IronPDF frente a iTextSharp: vista MVC a archivo PDF en C#: Imagen 12 - Salida de la ejecución de JavaScript

Incorporación de fuentes y formato de documentos

Asegúrese de que las fuentes personalizadas se representen correctamente incrustándolas directamente en su HTML mediante URI de datos codificados en base64:

@font-face {
    font-family: 'CustomFont';
    src: url(data:font/woff2;base64,[base64-encoded-font]) format('woff2');
}

La incrustación de fuentes directamente en el HTML garantiza una representación coherente en todos los entornos, eliminando los problemas de fuentes ausentes en los documentos PDF generados. Este enfoque funciona igual de bien tanto si se utiliza una representación basada en URL mediante RenderUrlAsPdf como una representación basada en cadenas mediante RenderHtmlAsPdf.

Para conocer patrones de configuración adicionales, incluido el tamaño de página, la orientación y el control de márgenes, visite la documentación de opciones de representación de IronPDF. También puede revisar proyectos de ejemplo en GitHub que demuestran patrones de integración MVC comunes.

Integración de IronPDF con el ecosistema de facturación electrónica español

El sistema de facturación electrónica en España combina varios estándares y organismos reguladores que las aplicaciones ASP.NET MVC deben conocer al generar PDFs. A continuación se describe el flujo completo para empresas sujetas a VERI*FACTU y Facturae:

*VERIFACTU (AEAT)*: La Orden Ministerial HAC/1177/2024 establece que los sistemas de facturación deben generar registros VERIFACTU con hash encadenado y código QR de verificación AEAT. IronPDF genera el documento PDF con el QR incrustado; el registro XML VERI*FACTU se transmite a la AEAT por API separada.

Facturae y FACe: Para la facturación entre empresas (B2B) y con la Administración Pública española, el estándar Facturae 3.2.2 (aprobado por el Ministerio de Hacienda) requiere XML firmado con certificado XAdES-BES o XAdES-T. El PDF generado por IronPDF actúa como representación visual anexa al XML Facturae. La transmisión al FACe (Punto General de Entrada de Facturas Electrónicas) se realiza vía servicios web SOAP.

TicketBAI en el País Vasco: Los territorios forales de Bizkaia, Gipuzkoa y Araba aplican el sistema TicketBAI con carácter obligatorio. NaTicket (Navarra) aplica un régimen equivalente. Cada factura emitida bajo estos sistemas debe llevar un identificador único TBai y un código QR. IronPDF integra estos datos visuales en el PDF; el motor TicketBAI se encarga de la generación y firma del XML foral.

eIDAS y FNMT-RCM: Para firma de PDFs con validez jurídica en el Espacio Económico Europeo, se recomienda el formato PAdES conforme al Reglamento eIDAS. Los certificados emitidos por la FNMT-RCM (Fábrica Nacional de Moneda y Timbre – Real Casa de la Moneda) o por prestadores de servicios de confianza acreditados (TSP) son los más utilizados por las empresas españolas. IronPDF soporta la incrustación de firmas digitales PDF para flujos PAdES.

LOPDGDD y AEPD: Los PDFs que contienen datos personales de ciudadanos españoles quedan sujetos a la LOPDGDD. La AEPD (Agencia Española de Protección de Datos) puede imponer sanciones de hasta 20 millones de euros o el 4% de la facturación global por infracciones graves. IronPDF facilita el cifrado de documentos y la restricción de acceso, que son medidas técnicas elementales para el cumplimiento normativo.

¿Cuáles son los próximos pasos para desarrolladores en España?

La elección de la biblioteca de generación de PDF en un proyecto ASP.NET MVC español no es solo una decisión técnica: es también una decisión legal y fiscal. La Ley Crea y Crece (Ley 18/2022) obliga a las empresas a emitir facturas en formato electrónico Facturae; la Orden HAC/1177/2024 exige la adhesión al sistema VERIFACTU para los contribuyentes del Impuesto sobre Sociedades e IVA; y el Reglamento eIDAS garantiza la validez transfronteriza de las firmas digitales PAdES. Elegir iTextSharp bajo AGPL implica exponerse a la obligación de publicar el código fuente de la solución completa de facturación, incluyendo algoritmos de cálculo, esquemas de integración VERIFACTU o lógica de generación de códigos QR AEAT.

Si bien iTextSharp prestó servicios a la comunidad .NET durante muchos años, el desarrollo web moderno en España exige una generación de PDF más capaz y sin las restricciones de la licencia AGPL. El motor de renderizado de IronPDF, basado en Chrome, ofrece la precisión de píxeles perfecta y la compatibilidad total con CSS3 que requieren las aplicaciones ASP.NET MVC actuales. Su API de alto nivel, documentación exhaustiva y licencias optimizadas para empresas lo convierten en la opción ideal para proyectos que necesiten generar documentos conformes con VERI*FACTU, Facturae, TicketBAI (Bizkaia, Gipuzkoa, Araba) o NaTicket (Navarra), y cumplir con las obligaciones de la LOPDGDD y la AEPD en el tratamiento de datos personales de ciudadanos españoles.

Desde la perspectiva del SII (Suministro Inmediato de Información), las empresas con volumen de operaciones superior a 6 millones de euros o inscritas en el Registro de Devolución Mensual del IVA (REDEME) deben transmitir los registros de sus facturas emitidas y recibidas a la AEAT en un plazo de cuatro días hábiles. IronPDF puede integrarse en pipelines ASP.NET MVC que generan en paralelo el PDF de la factura y el registro XML para el SII, optimizando el flujo de trabajo de cumplimiento fiscal. Las empresas del sector inmobiliario, financiero o con operaciones en el régimen de IVA de caja también deben considerar los casos especiales de su colectivo al diseñar la plantilla de factura.

Para avanzar con la generación de PDF en su aplicación:

Preguntas Frecuentes

¿Para qué sirve convertir vistas MVC a PDF?

La conversión de vistas MVC a PDF permite a los desarrolladores generar documentos imprimibles y fácilmente compartibles directamente desde aplicaciones web, conservando la disposición y el diseño de la vista original.

¿Qué es IronPDF?

IronPDF es una biblioteca .NET que facilita la creación, edición y conversión de documentos PDF dentro de aplicaciones .NET, ofreciendo una forma sencilla de integrar la funcionalidad PDF.

¿Cómo simplifica IronPDF la conversión de vistas MVC a PDF?

IronPDF simplifica el proceso al permitir a los desarrolladores convertir vistas HTML y MVC directamente a formato PDF sin grandes requisitos de codificación, conservando la disposición y el diseño originales.

¿Cuáles son las limitaciones de iTextSharp para la conversión de PDF en MVC?

XMLWorkerHelper de iTextSharp no admite CSS3 moderno, flexbox, diseños de cuadrícula, ejecución de JavaScript o estilo de Bootstrap. Su licencia AGPL también requiere abrir el código fuente de tu aplicación si usas la versión gratuita.

¿Puede IronPDF renderizar JavaScript antes de generar el PDF?

Sí, IronPDF admite la ejecución de JavaScript durante la renderización. Puedes habilitarlo con EnableJavaScript y controlar el retraso de renderización usando WaitFor.RenderDelay para asegurar que el contenido dinámico esté completamente cargado.

¿Cuáles son los requisitos del sistema para usar IronPDF?

IronPDF es compatible con .NET 6, .NET 7, .NET 8, .NET Core y .NET Framework 4.6.2+. Funciona en Windows, Linux y macOS.

¿Es posible personalizar la salida PDF al convertir vistas MVC?

Sí, usando IronPDF, los desarrolladores pueden personalizar la salida del PDF ajustando configuraciones como tamaño de página, orientación, márgenes, encabezados, pies de página, configuraciones de seguridad y tipo de medio CSS.

¿Es IronPDF compatible con el estilo CSS para la conversión de PDF?

IronPDF admite el estilo completo de CSS3 a través de su motor de renderizado Chromium, asegurando que el PDF convertido mantenga la apariencia visual del HTML original o vista MVC, incluyendo fuentes, colores, degradados y diseño.

¿Cómo se compara el rendimiento de IronPDF con iTextSharp?

IronPDF utiliza el motor Chromium para renderizar, lo que agrega una sobrecarga de arranque pero ofrece una precisión de renderización mucho superior. Para escenarios de alto volumen, IronPDF admite la renderización asincrónica y puede optimizarse con instancias de renderizado seguras para subprocesos.

¿Dónde puedo encontrar documentación sobre IronPDF?

Documentación completa para IronPDF está disponible en https://ironpdf.com/how-to/, incluyendo guías, tutoriales y referencias de API para ayudar a los desarrolladores en la implementación.

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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame