IRONSOFTWAREHOME
VIDEOS

Cómo exportar documentos en formato PDF UA en C#

Curtis Chau
Curtis Chau
Updated: 19 de julio de 2026

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: HiQPdf utiliza 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, 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 HiQPdf e 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 CSS3ParcialSe admite
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, IronPDF proporciona 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ón
HTML a PDFMuy bajo
URL a PDFMuy bajo
Fusionar PDFBajo
Encabezados/pies de páginaMedio
Tamaño de página/MargenesBajo
TriggerMode/DelaysBajo

Cambio de paradigma

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

HiQPdf:   converter.Document.Header.Height = 50;
          converter.Document.Header.Add(new HtmlToPdfVariableElement(...));
          
IronPDF:  renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { ... };
Text

Antes de empezar

Prerrequisitos

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

Identificar todos los usos de HiQPdf

# Find HiQPdf namespace 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" .
SHELL

Cambios en el paquete NuGet

# Remove all HiQPdf variants
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

# Install IronPDF (single package for all platforms)
dotnet add package IronPdf
SHELL

Inicio rápido de la migración

Paso 1: Actualizar la configuración de la licencia

Antes (HiQPdf):

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

Después (IronPDF):

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

Paso 2: Actualizar las importaciones de espacios de nombres

// Before (HiQPdf)
using HiQPdf;

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

Referencia completa de la API

Mapeo de clases principales

Clase HiQPdfClase IronPDF
HtmlToPdfChromePdfRenderer
PdfDocumentPdfDocument
HtmlToPdfVariableElementTextHeaderFooter o HtmlHeaderFooter

Mapeo de métodos de conversión

Método HiQPdfMétodo IronPDF
ConvertHtmlToMemory(html, baseUrl)RenderHtmlAsPdf(html)
ConvertUrlToMemory(url)RenderUrlAsPdf(url)
File.WriteAllBytes(path, bytes)pdf.SaveAs(path)

Mapeo de métodos de documentos PDF

Método HiQPdfMétodo IronPDF
PdfDocument.FromFile(path)PdfDocument.FromFile(path)
document1.AddDocument(document2)PdfDocument.Merge(pdf1, pdf2)
document.WriteToFile(path)pdf.SaveAs(path)

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-pages}Número total de páginas

Ejemplos de migración de código

Ejemplo 1: Conversión de HTML a PDF

Antes (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);
    }
}

Después (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");
    }
}

El enfoque HiQPdf requiere crear una instancia HtmlToPdf, llamar a ConvertUrlToMemory() o ConvertHtmlToMemory() para obtener una matriz de bytes y, a continuación, escribir los bytes manualmente en un archivo. El método ChromePdfRenderer de IronPDF devuelve un objeto PdfDocument con un método directo SaveAs(), lo que elimina la escritura manual del archivo. El motor Chromium moderno también ofrece una mejor representación de contenido HTML/CSS/JavaScript complejo. Consulte la documentación HTML a PDF para obtener más opciones de conversión.

Ejemplo 2: Combinar varios PDF

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

Después (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");
    }
}

El enfoque HiQPdf requiere cargar documentos desde archivos usando PdfDocument.FromFile(), llamando a AddDocument() en el primer documento para agregar el segundo y luego usando WriteToFile() para guardar. IronPDF proporciona un método estático más limpio que acepta múltiples objetos directamente, 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):

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

Después (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");
    }
}

El enfoque HiQPdf requiere configurar Document.Header.Height, crear objetos HtmlToPdfVariableElement y llamar a Add() en las secciones de encabezado/pie de página. Los marcadores de posición de número de página utilizan la sintaxis {CrtPage} y {PageCount}. IronPDF proporciona 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:

// HiQPdf placeholders
"Page {CrtPage} of {PageCount}"

// IronPDF placeholders
"Page {page} of {total-pages}"

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:

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

IronPDF devuelve un nuevo documento fusionado:

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

Sin límite de 3 páginas

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

Reutilizar ChromePdfRenderer

A diferencia de HiQPdf, donde es posible crear nuevas instancias HtmlToPdf para cada conversión, las ChromePdfRenderer de IronPDF se deben reutilizar:

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

Solución de problemas

Cuestión 1: HtmlToPdf no encontrado

Problema: la clase HtmlToPdf no existe en IronPDF.

Solución: Reemplazar con ChromePdfRenderer:

// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// IronPDF
var renderer = new ChromePdfRenderer();

Asunto 2: ConvertHtmlToMemory no se encuentra

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

Solución: Utilice RenderHtmlAsPdf():

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

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

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:

// HiQPdf syntax (won't work)
"Page {CrtPage} of {PageCount}"

// IronPDF syntax
"Page {page} of {total-pages}"

Edición 4: HtmlToPdfVariableElement No Encontrado

Problema: HtmlToPdfVariableElement la clase no existe.

Solución: utilice TextHeaderFooter o HtmlHeaderFooter:

// HiQPdf
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div>Header</div>", "");
converter.Document.Header.Add(headerHtml);

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

Lista de comprobación de la migración

Pre-Migración

  • Inventariar todas las llamadas API de HiQPdf en 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
  • Pruebe IronPDF en el entorno de desarrollo

Migración de código

  • Eliminar todos los paquetes NuGet de HiQPdf (todas las variantes)
  • Instalar el paquete NuGet de IronPDF: dotnet add package IronPdf
  • Actualizar las importaciones de espacios de nombres
  • Reemplace HtmlToPdf con ChromePdfRenderer
  • Convertir ConvertHtmlToMemory() a RenderHtmlAsPdf()
  • Convertir ConvertUrlToMemory() a RenderUrlAsPdf()
  • Actualizar marcadores de posición de encabezado/pie de página ({CrtPage}{page}, {PageCount}{total-pages})
  • Reemplace HtmlToPdfVariableElement con 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 HiQPdf de 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 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