Saltar al pie de página
GUíAS DE MIGRACIóN

Cómo migrar de HiQPdf a IronPDF en C#

HiQPdf es una biblioteca comercial de conversión de HTML a PDF con varias limitaciones que afectan a las aplicaciones de producción:

  1. Versión "gratuita" restrictiva: la versión gratuita impone un límite de 3 páginas con marcas de agua intrusivas, esencialmente inutilizables para cargas de trabajo de producción que requieren la generación completa de documentos.

  2. Motor WebKit más antiguo: HiQPdfutiliza un motor de renderizado basado en WebKit más antiguo que tiene problemas con los marcos de JavaScript modernos como React, Angular y Vue.

  3. Compatibilidad poco clara con .NET Core: la documentación no aclara explícitamente la compatibilidad con .NET Core/.NET 5+, lo que genera incertidumbre para el desarrollo de aplicaciones modernas.

  4. Paquetes fragmentados: Múltiples paquetes NuGet para diferentes plataformas (HiQPdf, HiQPdf.Free, HiQPdf.NetCore, HiQPdf.NetCore.x64, HiQPdf.Client) complican la gestión de dependencias.

  5. API compleja: requiere una configuración detallada a través de cadenas de propiedades Document , Header y Footer en lugar de métodos fluidos e intuitivos.

  6. Compatibilidad limitada con JavaScript: el motor WebKit tiene dificultades para representar contenido generado por marcos de JavaScript modernos y diseños dinámicos complejos.

Comparación entre HiQPdfe IronPDF

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
Compatibilidad con JS modernoLimitadoCompleto (React, Angular, Vue)
compatibilidad con .NET Core/5+Se necesitan varios paquetesUn único paquete unificado
Diseño de APICadenas de propiedades complejasAPI limpia y fluida
Compatibilidad con CSS3ParcialSoporte completo
DocumentaciónFragmentadoCompleto
Paquete NuGetMúltiples variantesPaquete único

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base preparada para el futuro con soporte documentado para las últimas versiones de .NET y un moderno motor de renderizado Chromium.


Evaluación de la complejidad de la migración

Esfuerzo estimado por función

CaracterísticaComplejidad de la migraciónNotas
HTML a PDFMuy bajoSustitución directa de métodos
URL a PDFMuy bajoSustitución directa de métodos
Fusionar PDFBajoEnfoque de fusión diferente
Encabezados/pies de páginaMedioCambio de sintaxis del marcador de posición
Tamaño de página/MargenesBajoMismas unidades (mm)
TriggerMode/DelaysBajoMapeo de propiedades

Cambio de paradigma

El cambio fundamental en esta migración de HiQPdfes de la configuración de la cadena de propiedades a las opciones de representación fluida:

using IronPdf; HiQPdf: convertidor.Documento.Encabezado.Altura = 50; convertidor.Documento.Encabezado.Añadir(nuevo HtmlToPdfVariableElement(...));

IronPDF: renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { ... }; using IronPdf;


Antes de empezar

Prerrequisitos

  1. Versión .NET:IronPDFes compatible con .NET Framework 4.6.2+ y .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Clave de licencia: Obtenga su clave de licencia deIronPDFen ironpdf.com
  3. Eliminar HiQPdf: planifique eliminar todas las variantes del paquete NuGet de HiQPdf

Identificar todos los usos de HiQPdf

using IronPdf;bash

Find HiQPdfnamespace usage

grep -r "using HiQPdf|HtmlToPdf|PdfDocument" --include="*.cs" .

Find header/footer usage

grep -r ".Header.|.Footer.|HtmlToPdfVariableElement" --include="*.cs" .

Find placeholder syntax

grep -r "CrtPage|PageCount" --include="*.cs" .

Find NuGet references

grep -r "HiQPdf" --include="*.csproj" . using IronPdf;

Cambios en el paquete NuGet

using IronPdf;bash

Remove all HiQPdfvariants

dotnet remove package HiQPdf dotnet remove package HiQPdf.Free dotnet remove package HiQPdf.NetCore dotnet remove package HiQPdf.NetCore.x64 dotnet remove package HiQPdf.Client

InstallIronPDF(single package for all platforms)

dotnet add package IronPdf using IronPdf;


Inicio rápido de la migración

Paso 1: Actualizar la configuración de la licencia

Antes (HiQPdf):

using IronPdf;csharp HtmlToPdf converter = new HtmlToPdf(); converter.SerialNumber = "HIQPDF-SERIAL-NUMBER"; using IronPdf;

Después (IronPDF):

using IronPdf;csharp // Set globally at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; using IronPdf;

Paso 2: Actualizar las importaciones de espacios de nombres

using IronPdf;csharp // Before (HiQPdf) using HiQPdf;

// After (IronPDF) using IronPdf; using IronPdf.Rendering; using IronPdf;


Referencia completa de la API

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
<código>HtmlToPdfVariableElement</código<código>TextHeaderFooter</código> o <código>HtmlHeaderFooter</código>Contenido de cabecera/pie 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)</códigoDevuelve PdfDocument
<código>ConvertUrlToMemory(url)</código<código>RenderUrlAsPdf(url)</códigoDevuelve PdfDocument
<código>File.WriteAllBytes(ruta, bytes)</código<código>pdf.SaveAs(ruta)</códigoMétodo de guardado directo

Mapeo de métodos de documentos PDF

Método HiQPdfMétodo IronPDFNotas
<código>PdfDocument.FromFile(path)</código<código>PdfDocument.FromFile(path)</códigoMismo nombre de método
<código>document1.AddDocument(document2)</códigoPdfDocument.Merge(pdf1, pdf2)Método de fusión estática
<código>document.WriteToFile(ruta)</código<código>pdf.SaveAs(ruta)</códigoNombre de método diferente

Mapeo de marcadores de posición de encabezado/pie

Marcador de posición HiQPdfMarcador de posición IronPDFDescripción
{CrtPage}{page}Número de página actual
{PageCount}{total de páginas}Número total de páginas

Ejemplos de migración de código

Ejemplo 1: Conversión de HTML a PDF

Antes (HiQPdf):

using IronPdf;csharp // 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);
}

} using IronPdf;

Después (IronPDF):

using IronPdf;csharp // 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");
}

} using IronPdf;

El método HiQPdfrequiere crear una instancia HtmlToPdf, llamar a ConvertUrlToMemory() o ConvertHtmlToMemory() para obtener una matriz de bytes y, a continuación, escribir manualmente los bytes en un archivo. El <código>ChromePdfRenderer</códigodeIronPDFdevuelve un objeto Documento PDFcon un método directo SaveAs(), eliminando el paso de escritura manual del archivo. El moderno motor Chromium también proporciona un mejor renderizado para contenidos HTML/CSS/JavaScript complejos. Consulte la documentación HTML a PDF para obtener más opciones de conversión.

Ejemplo 2: Combinar varios PDF

Antes (HiQPdf):

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

class Program { static void Main() { // Create first PDF HtmlToPdf converter1 = new HtmlToPdf(); byte[] pdf1 = converter1.ConvertHtmlToMemory("

First Document

", ""); 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");
}

} using IronPdf;

Después (IronPDF):

using IronPdf;csharp // 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");
}

} using IronPdf;

El enfoque de HiQPdfrequiere cargar documentos desde archivos mediante PdfDocument.FromFile(), llamar a AddDocument() en el primer documento para añadir el segundo y, a continuación, utilizar WriteToFile() para guardar.IronPDFproporciona un método estático PdfDocument.Merge() más limpio que acepta varios objetos Documento PDFdirectamente, sin necesidad de operaciones de archivo intermedias. Más información sobre mezclar y dividir archivos PDF.

Ejemplo 3: Encabezados y pies de página de PDF con números de página

Antes (HiQPdf):

using IronPdf;csharp // 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);
}

} using IronPdf;

Después (IronPDF):

using IronPdf;csharp // 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");
}

} using IronPdf;

El enfoque de HiQPdfrequiere establecer Document.Header.Height, crear objetos <código>HtmlToPdfVariableElement</códigoy llamar a Add() en las secciones de encabezado/pie. Los marcadores de posición de número de página utilizan la sintaxis {CrtPage}y {PageCount}.IronPDFproporciona una configuración TextHeaderFooter más limpia con propiedades CenterText y una sintaxis de marcador de posición diferente: {page}y {total-pages}. Consulte la documentación cabeceras y pies de página para obtener más opciones, incluidas las cabeceras basadas en HTML.


Notas de migración críticas

Cambio en la sintaxis de los marcadores

El cambio más importante para los documentos con números de página es la sintaxis del marcador de posición:

using IronPdf;csharp // HiQPdfplaceholders "Page {CrtPage} of {PageCount}"

//IronPDFplaceholders "Page {page} of {total-pages}" using IronPdf;

Mapeo completo de marcadores de posición:

  • {CrtPage}{page}
  • {PageCount}{total-pages}

Diferencia entre métodos de fusión

HiQPdf modifica el primer documento en su lugar:

using IronPdf;csharp // HiQPdf: Modifies document1 document1.AddDocument(document2); document1.WriteToFile("merged.pdf"); using IronPdf;

IronPDF devuelve un nuevo documento fusionado:

using IronPdf;csharp // IronPDF: Returns new document var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); using IronPdf;

Sin límite de 3 páginas

La versión gratuita de HiQPdftiene un máximo de 3 páginas con marcas de agua.IronPDFgenera documentos completos sin limitaciones artificiales durante el periodo de prueba.

Reutilizar ChromePdfRenderer

A diferencia de HiQPdf, donde es posible crear nuevas instancias de <código>HtmlToPdf</códigopara cada conversión, el <código>ChromePdfRenderer</códigodeIronPDFdebe reutilizarse:

using IronPdf;csharp // IronPDF: Create once, reuse var renderer = new ChromePdfRenderer(); var pdf1 = renderer.RenderHtmlAsPdf(html1); var pdf2 = renderer.RenderHtmlAsPdf(html2); using IronPdf;


Solución de problemas

Cuestión 1: HtmlToPdf no encontrado

Problema: la clase <código>HtmlToPdf</códigono existe en IronPDF.

Solución: Reemplazar con <código>ChromePdfRenderer</código:

using IronPdf;csharp // HiQPdf HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// IronPDF var renderer = new ChromePdfRenderer(); using IronPdf;

Asunto 2: ConvertHtmlToMemory no se encuentra

Problema: el método ConvertHtmlToMemory() no existe.

Solución: utilice RenderHtmlAsPdf() :

using IronPdf;csharp // HiQPdf byte[] pdfBytes = converter.ConvertHtmlToMemory(html, "");

// IronPDF var pdf = renderer.RenderHtmlAsPdf(html); byte[] pdfBytes = pdf.BinaryData; using IronPdf;

Asunto 3: Los marcadores de posición de número de página no funcionan

Problema: {CrtPage}y {PageCount}aparecen literalmente en la salida.

Solución: Actualizar la sintaxis del marcador de posición IronPDF:

using IronPdf;csharp // HiQPdfsyntax (won't work) "Page {CrtPage} of {PageCount}"

//IronPDFsyntax "Page {page} of {total-pages}" using IronPdf;

Edición 4: HtmlToPdfVariableElement No Encontrado

Problema: la clase <código>HtmlToPdfVariableElement</códigono existe.

Solución: utilice TextHeaderFooter o HtmlHeaderFooter :

using IronPdf;csharp // HiQPdf HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("

Header
", ""); converter.Document.Header.Add(headerHtml);

// IronPDF renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Header", FontSize = 12 }; using IronPdf;


Lista de comprobación de la migración

Pre-Migración

  • Inventariar todas las llamadas API de HiQPdfen el código base
  • Documentar los tamaños de página, márgenes y configuraciones actuales
  • Identificar configuraciones de encabezado/pie de página y marcadores de posición
  • Obtener la clave de licencia de IronPDF
  • PruebeIronPDFen el entorno de desarrollo

Migración de código

  • Eliminar todos los paquetes NuGet de HiQPdf(todas las variantes)
  • Instalar el paquete NuGet IronPdf: dotnet add package IronPdf
  • Actualizar las importaciones de espacios de nombres
  • Reemplazar <código>HtmlToPdf</códigocon ChromePdfRenderer
  • Convertir ConvertHtmlToMemory() a RenderHtmlAsPdf()
  • Convertir ConvertUrlToMemory() a RenderUrlAsPdf()
  • Actualizar los marcadores de posición de encabezado/pie de página ( {CrtPage}{page}, {PageCount}{total de páginas})
  • Reemplazar <código>HtmlToPdfVariableElement</códigocon TextHeaderFooter
  • Actualizar operaciones de fusión ( AddDocumentPdfDocument.Merge )
  • Agregar inicialización de clave de licencia al inicio

Pruebas

  • Prueba de conversión de HTML a PDF
  • Prueba de conversión de URL a PDF
  • Verificar la representación del encabezado/pie de página
  • Verificar los marcadores de posición de números de página
  • Prueba de fusión de PDF
  • Pruebe páginas con mucho uso de JavaScript (ahora compatible con Chromium)

Posmigración

  • Eliminar el número de serie de HiQPdfde la configuración
  • Actualización de la documentación
  • Supervisar las posibles diferencias de representació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