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:
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.
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.
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.
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.
API compleja: requiere una configuración detallada a través de cadenas de propiedades
Document,HeaderyFooteren lugar de métodos fluidos e intuitivos.- 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
| Aspecto | HiQPdf | IronPDF |
|---|---|---|
| Motor de renderizado | Basado en WebKit (más antiguo) | Chromium moderno |
| Nivel gratuito | límite de 3 páginas + marca de agua | prueba completa de 30 días |
| Compatibilidad con JS moderno | Limitado | Completo (React, Angular, Vue) |
| compatibilidad con .NET Core/5+ | Se necesitan varios paquetes | Un único paquete unificado |
| Diseño de API | Cadenas de propiedades complejas | API limpia y fluida |
| Compatibilidad con CSS3 | Parcial | Soporte completo |
| Documentación | Fragmentado | Completo |
| Paquete NuGet | Múltiples variantes | Paquete ú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ística | Complejidad de la migración | Notas |
|---|---|---|
| HTML a PDF | Muy bajo | Sustitución directa de métodos |
| URL a PDF | Muy bajo | Sustitución directa de métodos |
| Fusionar PDF | Bajo | Enfoque de fusión diferente |
| Encabezados/pies de página | Medio | Cambio de sintaxis del marcador de posición |
| Tamaño de página/Margenes | Bajo | Mismas unidades (mm) |
| TriggerMode/Delays | Bajo | Mapeo 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
- Versión .NET:IronPDFes compatible con .NET Framework 4.6.2+ y .NET Core 3.1+ / .NET 5/6/7/8/9+
- Clave de licencia: Obtenga su clave de licencia deIronPDFen ironpdf.com
- 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 HiQPdf | Clase IronPDF | Notas |
|---|---|---|
| <código>HtmlToPdf</código | <código>ChromePdfRenderer</código | Clase principal del conversor |
Documento PDF | Documento PDF | Mismo 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 HiQPdf | Método IronPDF | Notas |
|---|---|---|
| <código>ConvertHtmlToMemory(html, baseUrl)</código | <código>RenderHtmlAsPdf(html)</código | Devuelve PdfDocument |
| <código>ConvertUrlToMemory(url)</código | <código>RenderUrlAsPdf(url)</código | Devuelve PdfDocument |
| <código>File.WriteAllBytes(ruta, bytes)</código | <código>pdf.SaveAs(ruta)</código | Método de guardado directo |
Mapeo de métodos de documentos PDF
| Método HiQPdf | Método IronPDF | Notas |
|---|---|---|
| <código>PdfDocument.FromFile(path)</código | <código>PdfDocument.FromFile(path)</código | Mismo nombre de método |
| <código>document1.AddDocument(document2)</código | PdfDocument.Merge(pdf1, pdf2) | Método de fusión estática |
| <código>document.WriteToFile(ruta)</código | <código>pdf.SaveAs(ruta)</código | Nombre de método diferente |
Mapeo de marcadores de posición de encabezado/pie
| Marcador de posición HiQPdf | Marcador de posición IronPDF | Descripció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("
// 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()aRenderHtmlAsPdf() - Convertir
ConvertUrlToMemory()aRenderUrlAsPdf() - 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 (
AddDocument→PdfDocument.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






