COMPARACIóN

HiQPdf frente a IronPDF: Guía de comparación técnica

HiQPdfvs IronPDF: Motores de renderizado, diseño de API y compatibilidad con .NET moderna

Cuando los desarrolladores .NET evalúan soluciones HTML a PDF, HiQPdfemerge como una biblioteca comercial con renderizado basado en WebKit. Aunque HiQPdfes compatible con HTML5/CSS3, su antiguo motor WebKit puede tener problemas con los marcos JavaScript modernos, y la versión gratuita impone un límite de 3 páginas con marcas de agua intrusivas.IronPDFofrece un enfoque diferente: un moderno motor de renderizado basado en Chromium con total compatibilidad con JavaScript y un paquete unificado para todas las plataformas .NET.

Esta comparación examina ambas bibliotecas en dimensiones técnicamente relevantes para ayudar a los desarrolladores profesionales y arquitectos a tomar decisiones informadas para sus requisitos de .NET PDF.

Entender HiQPdf

HiQPdf es una biblioteca comercial de HTML a PDF que utiliza un motor de renderizado basado en WebKit. La biblioteca utiliza <código>HtmlToPdf</códigocomo clase principal de conversión con métodos como ConvertHtmlToMemory() y ConvertUrlToMemory() que devuelven datos byte[] sin procesar. La configuración se maneja a través de cadenas de propiedades en el objeto Document, incluyendo Document.Header, Document.Footer, y Document.PageSize.

La versión gratuita de HiQPdfimpone una limitación importante: un máximo de 3 páginas en los documentos PDF y una marca de agua intrusiva. Esto dificulta la realización de pruebas exhaustivas en documentos de mayor tamaño durante la evaluación. La biblioteca utiliza múltiples variantes del paquete NuGet para diferentes plataformas (HiQPdf, HiQPdf.Free, HiQPdf.NetCore, HiQPdf.NetCore.x64, HiQPdf.Client), y la documentación no aclara explícitamente la compatibilidad con .NET Core o .NET 5+.

Para los encabezados y pies de página, HiQPdfutiliza objetos <código>HtmlToPdfVariableElement</códigoañadidos a las colecciones Document.Header y Document.Footer. Los marcadores de posición de número de página utilizan la sintaxis {CrtPage}para la página actual y {PageCount}para el total de páginas.

Entendiendo IronPDF

IronPDF es una biblioteca PDF .NET que utiliza un moderno motor de renderizado Chromium y ofrece compatibilidad total con HTML5, CSS3 y marcos JavaScript como React, Angular y Vue. La biblioteca utiliza <código>ChromePdfRenderer</códigocomo clase principal de renderizado con métodos como RenderHtmlAsPdf() y RenderUrlAsPdf() que devuelven objetos PdfDocument.

IronPDF proporciona un único paquete NuGet unificado para todas las plataformas con compatibilidad documentada para .NET 6, 7, 8, 9 y 10. La configuración utiliza las propiedades <código>RenderingOptions</códigodirectamente en el renderizador. Los encabezados y pies de página pueden utilizar TextHeaderFooter con propiedades como CenterText y FontSize. Los marcadores de posición de número de página utilizan la sintaxis {page}y {total-pages}.

Comparación de motores de renderizado y compatibilidad

La diferencia fundamental entre estas bibliotecas radica en sus motores de renderizado y su compatibilidad con las plataformas.

AspectoHiQPdfIronPDF
Motor de renderizadoBasado en WebKit (más antiguo)Chromium moderno
Nivel gratuitolímite de 3 páginas + marca de aguaprueba completa de 30 días
Soporte JS modernoLimitadoCompleto (React, Angular, Vue)
Soporte .NET Core/5+Se necesitan varios paquetesUn único paquete unificado
Diseño de APICadenas de propiedades complejasAPI limpia y fluida
Soporte CSS3ParcialSoporte completo
DocumentaciónFragmentadoCompleto
Paquete NuGetMúltiples variantesPaquete único

El motor basado en WebKit de HiQPdfes una tecnología más antigua que puede presentar problemas con los marcos de JavaScript modernos y las estructuras HTML complejas. El motor Chromium deIronPDFofrece la misma calidad de renderizado que Google Chrome, lo que garantiza una conversión precisa del contenido web moderno.

Comparación de códigos: Operaciones comunes en PDF

Conversión de HTML y URL a PDF

Las operaciones más fundamentales demuestran las diferencias de diseño de las API.

HiQPdf:

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

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
        pdfFromHtml.SaveAs("fromhtml.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
        pdfFromHtml.SaveAs("fromhtml.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HiQPdf crea un conversor HtmlToPdf, llama a ConvertUrlToMemory() o ConvertHtmlToMemory() para obtener datos byte[] sin procesar y, a continuación, escribe manualmente en el disco mediante File.WriteAllBytes(). El método ConvertHtmlToMemory() requiere un segundo parámetro para la URL base (cadena vacía si no es necesario).

IronPDF crea un ChromePdfRenderer, llama a RenderUrlAsPdf() o RenderHtmlAsPdf() para obtener un objeto PdfDocument, y luego guarda directamente con SaveAs(). La API es más concisa con el manejo de documentos orientados a objetos.

Para conocer las opciones avanzadas de conversión de HTML, consulte la Guía de conversión de HTML a PDF.

Fusión de varios PDF

La fusión de PDF demuestra los diferentes enfoques de la manipulación de documentos.

HiQPdf:

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

class Program
{
    static void Main()
    {
        // Create first PDF
        HtmlToPdf converter1 = new HtmlToPdf();
        byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1);

        // Create second PDF
        HtmlToPdf converter2 = new HtmlToPdf();
        byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2);

        // Merge PDFs
        PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
        PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
        document1.AddDocument(document2);
        document1.WriteToFile("merged.pdf");
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        // Create first PDF
        HtmlToPdf converter1 = new HtmlToPdf();
        byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1);

        // Create second PDF
        HtmlToPdf converter2 = new HtmlToPdf();
        byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2);

        // Merge PDFs
        PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
        PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
        document1.AddDocument(document2);
        document1.WriteToFile("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Create first PDF
        var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
        pdf1.SaveAs("doc1.pdf");

        // Create second PDF
        var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
        pdf2.SaveAs("doc2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Create first PDF
        var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
        pdf1.SaveAs("doc1.pdf");

        // Create second PDF
        var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
        pdf2.SaveAs("doc2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HiQPdf requiere guardar primero los PDF en el disco, cargarlos con PdfDocument.FromFile(), utilizar AddDocument() para añadir uno a otro y, por último, WriteToFile() para guardar el resultado. Esto modifica el primer documento existente.

IronPDF puede fusionar documentos directamente en memoria mediante el método estático PdfDocument.Merge(), que devuelve un nuevo documento fusionado. Este enfoque es más limpio y no requiere E/S de archivos intermedios.

Cabeceras y pies de página con números de página

La configuración del encabezado y el pie de página muestra los distintos enfoques del contenido dinámico.

HiQPdf:

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

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // Add header
        htmlToPdfConverter.Document.Header.Height = 50;
        HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
        htmlToPdfConverter.Document.Header.Add(headerHtml);

        // Add footer with page number
        htmlToPdfConverter.Document.Footer.Height = 50;
        HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
        htmlToPdfConverter.Document.Footer.Add(footerHtml);

        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // Add header
        htmlToPdfConverter.Document.Header.Height = 50;
        HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
        htmlToPdfConverter.Document.Header.Add(headerHtml);

        // Add footer with page number
        htmlToPdfConverter.Document.Footer.Height = 50;
        HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
        htmlToPdfConverter.Document.Footer.Add(footerHtml);

        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Configure header and footer
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header",
            FontSize = 12
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
        pdf.SaveAs("header-footer.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        // Configure header and footer
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header",
            FontSize = 12
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
        pdf.SaveAs("header-footer.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

HiQPdf configura encabezados y pies de página mediante las propiedades Document.Header y Document.Footer, estableciendo Height y añadiendo objetos HtmlToPdfVariableElement. Los marcadores de posición de número de página utilizan {CrtPage}para la página actual y {PageCount}para el total de páginas.

IronPDF utiliza RenderingOptions.TextHeader y RenderingOptions.TextFooter con objetos TextHeaderFooter. Propiedades como CenterText y FontSize proporcionan una configuración directa. Los marcadores de posición de número de página utilizan {page}y {total-pages}.

Obtenga más información sobre la configuración de encabezados y pies de página en Tutoriales de IronPDF.

Referencia de mapeo de API

Para los desarrolladores que estén evaluando la migración a HiQPdfo comparando capacidades, este mapeo muestra operaciones equivalentes:

Mapeo de clases principales

Clase HiQPdfClase IronPDFNotas
<código>HtmlToPdf</código<código>ChromePdfRenderer</códigoClase principal del conversor
Documento PDFDocumento PDFMismo nombre, distinto espacio de nombres
Página PDFpdf.Pages[i]Acceso mediante indexador
<código>PdfDocumentControl</código<código>RenderingOptions</códigoConfiguración
<código>PdfHeader</código> / <código>PdfDocumentHeader</código><código>HtmlHeaderFooter</códigoConfiguración de la cabecera
Pie de página de PDF / Pie de página de documento PDF<código>HtmlHeaderFooter</códigoConfiguración del pie de página
<código>HtmlToPdfVariableElement</código<código>HtmlHeaderFooter.HtmlFragment</códigoHTML en encabezados/pies de página

Mapeo de métodos de conversión

Método HiQPdfMétodo IronPDFNotas
<código>ConvertHtmlToMemory(html, baseUrl)</código<código>RenderHtmlAsPdf(html, baseUrl)</códigoDevuelve PdfDocument
<código>ConvertUrlToMemory(url)</código<código>RenderUrlAsPdf(url)</códigoDevuelve PdfDocument
<código>ConvertHtmlToFile(html, baseUrl, path)</código<código>RenderHtmlAsPdf(html).SaveAs(path)</códigoMétodos en cadena
ConvertirUrlAArchivo(url, ruta)<código>RenderUrlAsPdf(url).SaveAs(path)</códigoMétodos en cadena

Mapeo de propiedades

Propiedad de HiQPdfPropiedad de IronPDFNotas
Ancho del navegador<código>RenderingOptions.ViewPortWidth</códigoEn píxeles
Altura del navegador<código>RenderingOptions.ViewPortHeight</códigoEn píxeles
<código>Document.PageSize</código<código>RenderingOptions.PaperSize</códigoUtilizar enum
Document.PageOrientation<código>RenderingOptions.PaperOrientation</códigoRetrato/Paisaje
<código>Document.Margins.Top</código<código>RenderingOptions.MarginTop</códigoEn mm (no puntos)
<código>Document.Margins.Bottom</código<código>RenderingOptions.MarginBottom</códigoEn mm
<código>Document.Margins.Left</código<código>RenderingOptions.MarginLeft</códigoEn mm
<código>Document.Margins.Right</código<código>RenderingOptions.MarginRight</códigoEn mm
<código>Document.Header.Height</códigoHtmlHeader.MaxHeightAltura de la cabecera
<código>Document.Footer.Height</código<código>HtmlFooter.MaxHeight</códigoAltura del pie de página
<código>NúmeroDeSerie</código<código>IronPdf.License.LicenseKey</código>Conjunto global

Mapeo sintáctico de marcadores

Los marcadores de posición de cabecera y pie de página difieren entre las bibliotecas:

HiQPdfIronPDF
{CrtPage}{page}
{PageCount}{total de páginas}
{CrtPageUri}{url}
{CrtPageTitle}{html-title}

Resumen comparativo de características

CaracterísticaHiQPdfIronPDF
Renderizado Chromium❌ (WebKit)
JavaScript moderno (React, Angular, Vue)⚠️ Limitada
Compatibilidad total con CSS3⚠️ Parcial
compatibilidad con .NET 6/7/8/9/10⚠️ Documentación poco clara
Paquete NuGet único❌ (Múltiples variantes)
Prueba completa gratuita❌ (límite de 3 páginas + marca de agua)✅(30 días)
HTML a PDF
URL a PDF
Fusión de PDF✅(AñadirDocumento)✅(Merge)
Encabezados/pies de página✅(HtmlToPdfVariableElement)✅(TextHeaderFooter)

Cuándo los equipos consideran cambiar de HiQPdfa IronPDF

Los equipos de desarrollo evalúan la transición de HiQPdfaIronPDFpor varias razones:

Versión gratuita restrictiva: La versión gratuita de HiQPdfimpone un límite de 3 páginas con marcas de agua intrusivas, por lo que es esencialmente inutilizable para la producción y difícil de evaluar a fondo.IronPDFofrece una versión de prueba completa de 30 días sin límite de páginas.

Motor WebKit antiguo: El motor de renderización basado en WebKit de HiQPdftiene dificultades con los marcos de JavaScript modernos como React, Angular y Vue. El motor Chromium deIronPDFofrece la misma calidad de renderizado que Google Chrome, lo que garantiza una conversión precisa de contenidos web modernos y complejos.

Compatibilidad poco clara con .NET Core: La documentación de HiQPdfno aclara explícitamente la compatibilidad con .NET Core o .NET 5+, y la biblioteca requiere paquetes NuGet independientes para las distintas plataformas.IronPDFproporciona un único paquete unificado con soporte documentado para .NET 6, 7, 8, 9 y 10.

Paquetes NuGet fragmentados: HiQPdfrequiere diferentes variantes de paquetes (HiQPdf, HiQPdf.Free, HiQPdf.NetCore, HiQPdf.NetCore.x64, HiQPdf.Client) para diferentes escenarios.IronPDFutiliza un único paquete para todas las plataformas.

Diseño complejo de la API: HiQPdfrequiere una configuración detallada mediante cadenas de propiedades como <código>Document.Header.Height</códigoy Document.Footer.Add(). La API fluida deIronPDFcon propiedades <código>RenderingOptions</códigoproporciona una configuración más limpia.

Sintaxis diferente de los marcadores de posición: HiQPdfutiliza {CrtPage}y {PageCount}marcadores de posición, mientras queIronPDFutiliza {page}y {total-pages}. La migración requiere la actualización de todas las plantillas de encabezado y pie de página.

Fuerzas y consideraciones

Puntos fuertes de HiQPdf

  • Soporte HTML5/CSS3: Proporciona capacidades de renderizado HTML5 y CSS3
  • Biblioteca establecida: Biblioteca comercial con base de usuarios existente

Consideraciones sobre HiQPdf

  • Motor WebKit: Tecnología de renderizado más antigua con soporte JavaScript moderno limitado
  • Límite de 3 páginas: Versión gratuita significativamente restringida
  • Paquetes fragmentados: Múltiples paquetes NuGet para diferentes plataformas
  • Soporte .NET poco claro: La documentación no aclara explícitamente la compatibilidad moderna con .NET
  • Cadenas de propiedades complejas: Configuración verborreica mediante propiedades anidadas
  • Unidades basadas en puntos: Utiliza puntos (72 por pulgada) para las mediciones

Puntos fuertes de IronPDF

  • Motor Chromium: Renderizado moderno con total compatibilidad con JavaScript
  • Paquete unificado: Un único paquete NuGet para todas las plataformas
  • Prueba completa: 30 días de prueba con todas las funciones
  • Soporte .NET moderno: Documentado para .NET 6, 7, 8, 9, 10
  • API limpia: Configuración <código>RenderingOptions</códigofluida
  • Recursos completos: tutoriales y documentación exhaustivos

Consideraciones sobre IronPDF

  • Licencia comercial: Necesaria para uso en producción
  • Unidades milimétricas: Utiliza milímetros en lugar de puntos para los márgenes

Conclusión

HiQPdf eIronPDFrepresentan distintas generaciones de tecnología HTML-to-PDF en aplicaciones .NET. El motor basado en WebKit de HiQPdfproporciona compatibilidad básica con HTML5/CSS3, pero tiene problemas con los marcos de JavaScript modernos y ofrece una compatibilidad poco clara con .NET Core con múltiples paquetes fragmentados. El límite de 3 páginas de la versión gratuita restringe considerablemente la evaluación.

IronPDF proporciona una alternativa moderna basada en Chromium con soporte completo de JavaScript para aplicaciones React, Angular y Vue. El paquete NuGet unificado con compatibilidad documentada con .NET 6/7/8/9/10 simplifica la implementación, y el diseño limpio de la API reduce la complejidad de la configuración.

A medida que las organizaciones planifican .NET 10, C# 14 y el desarrollo de aplicaciones hasta 2026, la elección entre el antiguo renderizado WebKit con paquetes fragmentados y el moderno renderizado Chromium con soporte unificado afecta significativamente tanto a la velocidad de desarrollo como a la calidad de los resultados. Los equipos que necesiten una compatibilidad moderna con JavaScript, una compatibilidad clara con .NET o una gestión simplificada de paquetes encontrarán enIronPDFuna respuesta eficaz a estos requisitos.

Comience a evaluarIronPDFcon una prueba gratuita y explore la documentación exhaustiva para evaluar si se adapta a sus requisitos específicos.