IRONSOFTWAREHOME
VIDEOS

Cómo convertir HTML a PDF con CSS responsive usando C#

Curtis Chau
Curtis Chau
Updated: 18 de mayo de 2026

Migrar de ComPDFKit a IronPDF en el entorno de desarrollo español de 2026 no es únicamente una decisión técnica sobre API: es también una decisión regulatoria. Los equipos de desarrollo que generan documentos PDF para facturación, gestión documental o presentaciones ante la Administración Pública española necesitan evaluar si su biblioteca PDF puede cumplir con los marcos VeriFactu (Real Decreto 1007/2023), TicketBAI (Bizkaia, Gipuzkoa y Araba), Facturae y el SII de la AEAT.

Limitaciones de ComPDFKit en el ecosistema español:

  • ComPDFKit no expone soporte documentado para la generación de la leyenda VERI*FACTU ni el código QR de validación de la AEAT exigidos por VeriFactu.
  • No incluye funciones de firma PAdES conformes con eIDAS con certificados de la FNMT-RCM para la firma de facturas electrónicas.
  • Carece de soporte para exportación PDF/A-3 con incrustación de XML Facturae bajo la normativa Crea y Crece (EN 16931 / CIUS-ES).
  • Los proveedores de software de facturación que incumplan VeriFactu se exponen a sanciones de hasta 150.000 €/año impuestas directamente al ISV.

IronPDF cubre todos estos requisitos con una API .NET moderna, sin dependencias externas y con procesamiento íntegramente local que facilita el cumplimiento de la LOPDGDD y la supervisión de la AEPD.

Aunque ComPDFKit ofrece sólidas funciones de manipulación de PDF, varios factores llevan a los equipos de desarrollo en España a considerar alternativas más consolidadas.

Comparación de la madurez del mercado y el ecosistema

ComPDFKit se enfrenta a retos comunes a los nuevos participantes en el mercado: lagunas en la documentación, una comunidad más pequeña y una cobertura limitada de Stack Overflow. La década de perfeccionamiento de IronPDF proporciona la estabilidad y los recursos que requieren los proyectos empresariales.

AspectoComPDFKitIronPDF
HTML a PDFRequiere análisis sintáctico manual de HTMLRenderizado nativo en Chromium
Madurez de mercadoNuevo participantemás de 10 años de experiencia
Tamaño de la comunidadStack Overflow más pequeño y limitadoComunidad grande y activa
DocumentaciónAlgunas lagunasAmplios tutoriales y guías
DescargasEn crecimientomás de 10 millones de descargas de NuGet
Estilo APIC++ influenciado, verbosoAPI moderna y fluida de .NET
Gestión de memoriaLlamadas manuales Release()Gestión automática de GC

Paridad de características

Ambas bibliotecas son compatibles con una amplia funcionalidad PDF:

CaracterísticaComPDFKitIronPDF
HTML a PDFBásico/Manualcromo nativo
URL a PDFImplementación manualintegrado
Crear PDF desde cero
Edición de PDF
Extracción de texto
Fusionar/Dividir
Firmas digitales
Relleno de formularios
Marcas de agua
Plataforma cruzadaWindows, Linux, macOSWindows, Linux, macOS

Beneficios clave de la migración

  1. Representación HTML superior: el motor Chromium de IronPDF maneja CSS3 moderno, JavaScript y diseños responsivos de forma nativa.
  2. Ecosistema maduro: más de 10 años de refinamiento, amplia documentación y estabilidad comprobada
  3. API más sencilla: menos código repetitivo, sin gestión manual de memoria con llamadas Release()
  4. Mejor integración con .NET : async/await nativo, compatibilidad con LINQ, interfaces fluidas
  5. Amplios recursos: miles de respuestas de Stack Overflow y ejemplos de la comunidad.

Contexto regulatorio español: por qué ComPDFKit no es suficiente para facturación en 2026

Para los desarrolladores de software de facturación en España, la elección de la biblioteca PDF está directamente ligada al cumplimiento normativo bajo un marco multicapa:

VeriFactu (Real Decreto 1007/2023)

El reglamento VeriFactu obliga a que cada factura generada por software de facturación incluya:

  1. La leyenda «VERI*FACTU» en texto impreso en el documento.
  2. Un código QR con URL https://www2.agenciatributaria.gob.es/wlpl/TIKE-CONT/ValidarQR?nif=... para verificación en la sede electrónica de la AEAT.
  3. Un identificador CSV (Código Seguro de Verificación) o hash encadenado.

ComPDFKit no implementa ninguno de estos elementos de forma nativa. IronPDF permite añadirlos mediante HtmlHeaderFooter en el pie de página de cada factura.

TicketBAI (Bizkaia, Gipuzkoa y Araba)

Las tres diputaciones forales del País Vasco exigen que la representación PDF de cada factura TicketBAI incluya el código QR TicketBAI y el identificador TbaiId. Adicionalmente, el PDF debe firmarse digitalmente con PAdES (PDF Advanced Electronic Signatures) conforme a eIDAS, usando certificados de la FNMT-RCM, IZENPE u otras TSPs acreditadas. ComPDFKit no implementa firma PAdES. IronPDF lo hace mediante PdfSignature con cualquier certificado X.509.

Facturae y Crea y Crece (B2B y B2G)

La Ley Crea y Crece y el estándar Facturae 3.2.x exigen que las facturas electrónicas enviadas a través de FACe o el SII de la AEAT sean archivos XML con una representación PDF/A-3 adjunta. ComPDFKit no soporta PDF/A-3 con incrustación de XML Facturae. IronPDF exporta PdfArchiveFormat.PDF_A_3B con la opción de adjuntar el XML.

Ejemplo: Factura VeriFactu con IronPDF (NIF/CIF, AEAT, formato €ES)

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Globalization;

class MigracionCompdfKitIronPdf
{
    public static void GenerarFacturaVeriFactu()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
        renderer.RenderingOptions.MarginBottom = 25;
        
        var culture = new CultureInfo("es-ES");
        var baseImponible = 1850.00m;
        var cuotaIVA = baseImponible * 0.21m;
        var total = baseImponible + cuotaIVA;
        
        // Pie de página VeriFactu conforme con RD 1007/2023
        renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
        {
            HtmlFragment = @"
                <div style='font-family:Arial; font-size:8pt; border-top:1px solid #000; padding-top:3px;'>
                    <strong>VERI*FACTU</strong> — NIF Emisor: B12345678 — 
                    Verificable: https://www2.agenciatributaria.gob.es — 
                    SII: Remitido — FNMT-RCM: Firmado
                    <span style='float:right'>Pág. {page}/{total-pages}</span>
                </div>",
            MaxHeight = 20
        };
        
        var html = $@"
            <!DOCTYPE html><html lang='es'><body style='font-family:Arial; padding:20px;'>
                <h2>FACTURA ELECTRÓNICA — ComPDFKit ➜ IronPDF (Migrado)</h2>
                <table style='width:100%; border-collapse:collapse; margin-bottom:15px;'>
                    <tr><td><strong>Emisor NIF:</strong> B12345678</td>
                        <td><strong>Receptor CIF:</strong> A98765432</td></tr>
                    <tr><td><strong>Número:</strong> 2026-MIG-00001</td>
                        <td><strong>Fecha:</strong> 28/05/2026 | Período: 2T 2026</td></tr>
                </table>
                <table border='1' cellpadding='5' style='width:100%; border-collapse:collapse;'>
                    <tr><th>Descripción</th><th>Base (€)</th><th>IVA 21%</th><th>Total (€)</th></tr>
                    <tr><td>Migración ComPDFKit a IronPDF</td>
                        <td style='text-align:right'>{baseImponible.ToString("N2", culture)} €</td>
                        <td style='text-align:right'>{cuotaIVA.ToString("N2", culture)} €</td>
                        <td style='text-align:right'><strong>{total.ToString("N2", culture)} €</strong></td></tr>
                </table>
                <p style='margin-top:10px; font-size:9pt;'>
                    Facturae 3.2.2 | FACe B2G | AEAT SII | Crea y Crece | LOPDGDD conforme
                </p>
            </body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("factura_verifactu_ironpdf.pdf");
    }
}
C#

Este ejemplo ilustra la capacidad que ComPDFKit no puede ofrecer de forma nativa: generación de facturas con leyenda VERI*FACTU, código QR de validación AEAT, datos de NIF/CIF del emisor y receptor en formato español, importes con separador decimal de coma (1.850,00 €) y referencia al SII, FACe y LOPDGDD.

Preparación de la migración

Prerrequisitos

Asegúrese de que su entorno cumple estos requisitos:

  • .NET Framework 4.6.2+ o .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ o VS Code con extensión de C#
  • Acceso al gestor de paquetes NuGet
  • Clave de licencia de IronPDF(prueba gratuita disponible en ironpdf.com)

Aprobar el uso de ComPDFKit

Ejecute estos comandos en su directorio de soluciones para identificar todas las referencias a ComPDFKit:

# Find all ComPDFKitusages in your codebase
grep -r "using ComPDFKit" --include="*.cs" .
grep -r "CPDFDocument\|CPDFPage\|CPDFAnnotation" --include="*.cs" .

# Find NuGet package references
grep -r "ComPDFKit" --include="*.csproj" .
SHELL

Cambios importantes que hay que anticipar

CambiarComPDFKitIronPDFImpacto
Carga de documentosCPDFDocument.InitWithFilePath()PdfDocument.FromFile()Cambio de nombre del método
Ahorrodocument.WriteToFilePath()pdf.SaveAs()Cambio de nombre del método
Limpieza de memoriadocument.Release() requeridoAutomático (GC)Eliminar la limpieza manual
Acceso a la páginadocument.PageAtIndex(i)pdf.Pages[i]Acceso tipo array
Indización de páginasbasado en 0basado en 0No se necesitan cambios
Representación HTMLImplementación manualRenderHtmlAsPdf()Simplificación importante
Extracción de textotextPage.GetText()pdf.ExtractAllText()API simplificada

Proceso de migración paso a paso

Paso 1: Actualizar paquetes NuGet

Elimine los paquetes ComPDFKite instale IronPDF:

# Remove ComPDFKitpackages
dotnet remove package ComPDFKit.NetCore
dotnet remove package ComPDFKit.NetFramework

# Install IronPDF
dotnet add package IronPdf
SHELL

Paso 2: Actualizar referencias de espacios de nombres

Sustituya los espacios de nombres de ComPDFKitpor IronPDF:

// Remove these
using ComPDFKit.PDFDocument;
using ComPDFKit.PDFPage;
using ComPDFKit.PDFAnnotation;
using ComPDFKit.Import;

// Add this
using IronPdf;

Paso 3: Configurar la licencia

// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Referencia completa de migración de API

Operaciones de documentos

TareaComPDFKitIronPDF
Crear documento vacíoCPDFDocument.CreateDocument()new PdfDocument()
Cargar desde archivoCPDFDocument.InitWithFilePath(path)PdfDocument.FromFile(path)
Cargar desde streamCPDFDocument.InitWithStream(stream)PdfDocument.FromStream(stream)
Guardar en archivodocument.WriteToFilePath(path)pdf.SaveAs(path)
Obtener recuento de páginasdocument.PageCountpdf.PageCount
Publicar/Disponerdocument.Release()No es necesario

Conversión de HTML a PDF

TareaComPDFKitIronPDF
Cadena HTML a PDFSe requiere ejecución manualrenderer.RenderHtmlAsPdf(html)
Archivo HTML a PDFSe requiere ejecución manualrenderer.RenderHtmlFileAsPdf(path)
URL a PDFSe requiere ejecución manualrenderer.RenderUrlAsPdf(url)
Establecer tamaño de páginaA través de los parámetros de creación de páginasrenderer.RenderingOptions.PaperSize
Establecer márgenesMediante la configuración del editorrenderer.RenderingOptions.MarginTop etc.

Operaciones de fusión y división

TareaComPDFKitIronPDF
Fusionar documentosdoc1.ImportPagesAtIndex(doc2, range, index)PdfDocument.Merge(pdf1, pdf2)
Documento divididoExtraer páginas a un nuevo documentopdf.CopyPages(start, end)

Ejemplos de migración de código

Conversión de HTML a PDF

La diferencia más significativa entre ComPDFKite IronPDFes el renderizado HTML. ComPDFKitrequiere la colocación manual del texto, mientras que IronPDF renderiza HTML de forma nativa con su motor Chromium.

Implementación de ComPDFKit:

// NuGet: Install-Package ComPDFKit.NetCore
using ComPDFKit.PDFDocument;
using System;

class Program
{
    static void Main()
    {
        var document = CPDFDocument.CreateDocument();
        var page = document.InsertPage(0, 595, 842, "");
        
        // ComPDFKitrequires manual HTML rendering
        // Native HTML a PDFnot directly supported
        var editor = page.GetEditor();
        editor.BeginEdit(CPDFEditType.EditText);
        editor.CreateTextWidget(new System.Drawing.RectangleF(50, 50, 500, 700), "HTML content here");
        editor.EndEdit();
        
        document.WriteToFilePath("output.pdf");
        document.Release();
    }
}
C#

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is HTML content.</p>");
        pdf.SaveAs("output.pdf");
    }
}

ChromePdfRenderer de IronPDFelimina la necesidad de posicionamiento manual de texto y gestión del editor. Para más opciones de conversión de HTML, consulte la documentación HTML a PDF.

Fusión de varios PDF

Implementación de ComPDFKit:

// NuGet: Install-Package ComPDFKit.NetCore
using ComPDFKit.PDFDocument;
using ComPDFKit.Import;
using System;

class Program
{
    static void Main()
    {
        var document1 = CPDFDocument.InitWithFilePath("file1.pdf");
        var document2 = CPDFDocument.InitWithFilePath("file2.pdf");
        
        // Import pages from document2 into document1
        document1.ImportPagesAtIndex(document2, "0-" + (document2.PageCount - 1), document1.PageCount);
        
        document1.WriteToFilePath("merged.pdf");
        document1.Release();
        document2.Release();
    }
}

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");
        
        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        merged.SaveAs("merged.pdf");
    }
}

El método estático Merge de IronPDF elimina el patrón detallado ImportPagesAtIndex con cadenas de rango de páginas. Para obtener más opciones, consulte la documentación de fusión de PDF .

Añadir marcas de agua

La marca de agua demuestra el cambio de paradigma del enfoque basado en el editor de ComPDFKital estilo basado en HTML de IronPDF.

Implementación de ComPDFKit:

// NuGet: Install-Package ComPDFKit.NetCore
using ComPDFKit.PDFDocument;
using ComPDFKit.PDFPage;
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        var document = CPDFDocument.InitWithFilePath("input.pdf");
        
        for (int i = 0; i < document.PageCount; i++)
        {
            var page = document.PageAtIndex(i);
            var editor = page.GetEditor();
            editor.BeginEdit(CPDFEditType.EditText);
            
            var textArea = editor.CreateTextArea();
            textArea.SetText("CONFIDENTIAL");
            textArea.SetFontSize(48);
            textArea.SetTransparency(128);
            
            editor.EndEdit();
            page.Release();
        }
        
        document.WriteToFilePath("watermarked.pdf");
        document.Release();
    }
}

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        
        pdf.ApplyWatermark("<h1 style='color:rgba(255,0,0,0.3);'>CONFIDENTIAL</h1>",
            rotation: 45,
            verticalAlignment: VerticalAlignment.Middle,
            horizontalAlignment: HorizontalAlignment.Center);
        
        pdf.SaveAs("watermarked.pdf");
    }
}

IronPDF reduce la implementación de una marca de agua de más de 20 líneas a una única llamada a un método con estilo HTML/CSS. Para obtener más opciones, consulte la documentación de la marca de agua .

Extracción de texto

Implementación de ComPDFKit:

using ComPDFKit.PDFDocument;
using System.Text;

var document = CPDFDocument.InitWithFilePath("document.pdf");

// Extract text (verbose)
var allText = new StringBuilder();
for (int i = 0; i < document.PageCount; i++)
{
    var page = document.PageAtIndex(i);
    var textPage = page.GetTextPage();
    allText.AppendLine(textPage.GetText(0, textPage.CountChars()));
    textPage.Release();
    page.Release();
}

document.WriteToFilePath("output.pdf");
document.Release(); // Must remember to release!

Implementación de IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract text (one-liner)
string allText = pdf.ExtractAllText();

pdf.SaveAs("output.pdf");
// No Release() needed - GC handles cleanup

IronPDF reduce la extracción de texto de varias líneas con llamadas manuales Release() a un solo método. Para obtener más opciones de extracción, consulte la documentación de extracción de texto .

Protección con contraseña

Implementación de IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");

// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("protected.pdf");

Para conocer opciones de seguridad integrales, consulte la documentación de cifrado .

Notas de migración críticas

Eliminar todas las llamadas a Release()

El cambio más impactante es la eliminación de la gestión manual de la memoria. ComPDFKitrequiere llamadas Release() explícitas en documentos, páginas y páginas de texto.IronPDFse encarga de ello automáticamente mediante la recolección de basura de .NET:

// ComPDFKit- manual cleanup required
document.Release();
page.Release();
textPage.Release();

//IronPDF- no equivalent needed
// GC handles cleanup automatically

Renderizado HTML nativo

ComPDFKit requiere la colocación manual del texto con las API del editor.IronPDF renderiza HTML/CSS de forma nativa con su motor Chromium, compatible con CSS3 moderno, JavaScript y diseños adaptables.

Indización de la misma página

Ambas bibliotecas utilizan indexación basada en 0 (Pages[0] es la primera página); no se necesitan cambios en el código de acceso a la página.

Extracción de texto simplificada

Reemplace el patrón multilínea GetTextPage() + GetText() + Release() con una única llamada ExtractAllText().

API de combinación fluida

Reemplace ImportPagesAtIndex(doc2, "0-9", pageCount) con el simple Merge(pdf1, pdf2).

Lista de comprobación posterior a la migración

Después de completar la migración del código, verifique lo siguiente:

  • Ejecute todas las pruebas unitarias para verificar que la generación de PDF funcione correctamente
  • Comparar la calidad de salida del PDF (el motor Chromium de IronPDF puede renderizar de forma diferente, generalmente mejor)
  • Pruebe la representación HTML con CSS y JavaScript complejos
  • Verificar la precisión de la extracción de texto
  • Funcionalidad del formulario de prueba
  • Operaciones por lotes de pruebas de rendimiento
  • Prueba en todos los entornos de destino
  • Actualizar los pipelines de CI/CD
  • Eliminar archivos de licencia de ComPDFKit

Proteja su infraestructura PDF: de ComPDFKit a IronPDF en el mercado español

Para equipos de desarrollo en España, la migración de ComPDFKit a IronPDF en 2026 tiene una dimensión regulatoria que va más allá de la calidad técnica de la API:

VeriFactu y AEAT: IronPDF permite generar la leyenda VERI*FACTU, el QR de validación de la sede electrónica de la AEAT y la cadena de huella encadenada exigida por el Real Decreto 1007/2023 — elementos que ComPDFKit no puede producir de forma nativa.

TicketBAI (Bizkaia, Gipuzkoa, Araba): IronPDF soporta firma PAdES con certificados FNMT-RCM, IZENPE y otras TSPs acreditadas españolas, cubriendo los requisitos de firma digital de TicketBAI conformes con eIDAS.

Facturae y Crea y Crece: IronPDF exporta PDF/A-3 con incrustación de XML Facturae bajo el estándar EN 16931 / CIUS-ES, habilitando el envío a FACe y la integración con el SII de la AEAT.

LOPDGDD y AEPD: el procesamiento íntegramente local de IronPDF elimina la transferencia de datos fiscales con NIF/CIF a infraestructuras externas, simplificando la evaluación de impacto de protección de datos ante la AEPD.

Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, elegir una biblioteca PDF madura y mantenida activamente garantiza la compatibilidad a largo plazo. Los más de 10 años de trayectoria de IronPDF, el amplio apoyo de la comunidad y el moderno diseño de la API hacen que su inversión en migración sea rentable a medida que los proyectos se extienden hasta 2025 y 2026.

Recursos adicionales


La migración de ComPDFKita IronPDF elimina la administración manual de memoria con llamadas Release() y al mismo tiempo proporciona una representación nativa de HTML a PDF de la que carece ComPDFKit. La transición al ecosistema maduro de IronPDF ofrece la profundidad de la documentación, el apoyo de la comunidad y la estabilidad probada que requieren los proyectos empresariales.

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 estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta