Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

Como migrar do HiQPDF para o IronPDF em C#

HiQPdf é uma biblioteca comercial de conversão de HTML para PDF com diversas limitações preocupantes que afetam aplicações em produção:

  1. Versão "gratuita" restritiva: A versão gratuita impõe um limite de 3 páginas com marcas d'água intrusivas — essencialmente inutilizável para cargas de trabalho de produção que exigem a geração completa de documentos.

  2. Mecanismo WebKit antigo: O HiQPdf usa um mecanismo de renderização baseado em WebKit mais antigo que apresenta dificuldades com frameworks JavaScript modernos como React, Angular e Vue.

  3. Suporte pouco claro ao .NET Core : A documentação não esclarece explicitamente o suporte ao .NET Core / .NET 5+, criando incerteza para o desenvolvimento de aplicações modernas.

  4. Pacotes fragmentados: Vários pacotes NuGet para diferentes plataformas (HiQPdf, HiQPdf.Free, HiQPdf.NetCore, HiQPdf.NetCore.x64, HiQPdf.Client) complicam o gerenciamento de dependências.

  5. API complexa: Requer configuração detalhada por meio de cadeias de propriedades Document, Header, Footer em vez de métodos fluentes e intuitivos.

  6. Suporte limitado a JavaScript : O mecanismo WebKit apresenta dificuldades para renderizar conteúdo gerado por frameworks JavaScript modernos e layouts dinâmicos complexos.

Comparação entre HiQPDF e IronPDF

Aspecto HiQPdf IronPDF
Motor de renderização Baseado em WebKit (versão mais antiga) Cromo moderno
Nível gratuito Limite de 3 páginas + marca d'água Teste completo de 30 dias
Suporte a JavaScript moderno Limitado Completo (React, Angular, Vue)
Suporte for .NET Core/5+ São necessários vários pacotes. pacote único e unificado
Design de API Cadeias de propriedade complexas API limpa e fluente
Suporte a CSS3 Parcial Apoiado
Documentação Fragmentado Abrangente
Pacote NuGet Múltiplas variantes Pacote único

Para equipes que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece uma base preparada para o futuro, com suporte documentado para as versões mais recentes do .NET e um mecanismo de renderização Chromium moderno.


Avaliação da Complexidade da Migração

Esforço estimado por funcionalidade

Recurso Complexidade da Migração
HTML para PDF Muito baixo
URL para PDF Muito baixo
Mesclar PDFs Baixo
Cabeçalhos/Rodapés Médio
Tamanho da página/Margens Baixo
Modo de disparo/Atrasos Baixo

Mudança de paradigma

A mudança fundamental nesta migração para HiQPdf reside na transição da configuração da cadeia de propriedades para opções de renderização fluente:

HiQPdf: converter.Document.Header.Height = 50;
          converter.Documento.Cabeçalho.Adicionar(novo HtmlToPdfVariableElement(...));

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

Antes de começar

Pré-requisitos

  1. Versão do .NET : O IronPDF é compatível com o .NET Framework 4.6.2+ e o .NET Core 3.1+ / .NET 5/6/7/8/9+.
  2. Chave de licença: Obtenha sua chave de licença do IronPDF em IronPDF
  3. Remover HiQPdf: Planejamos remover todas as variantes do pacote NuGet HiQPdf.

Identificar todos os usos do 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" .
# 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

Alterações no pacote 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
# 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

Migração de Início Rápido

Etapa 1: Atualizar a configuração da licença

Antes (HiQPdf):

HtmlToPdf converter = new HtmlToPdf();
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER";
HtmlToPdf converter = new HtmlToPdf();
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER";
Dim converter As New HtmlToPdf()
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER"
$vbLabelText   $csharpLabel

Após (IronPDF):

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

Etapa 2: Atualizar importações de namespace

// Before (HiQPdf)
using HiQPdf;

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

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Referência completa da API

Mapeamento da Classe Principal

Classe HiQPdf Classe IronPDF
HtmlToPdf ChromePdfRenderer
PdfDocument PdfDocument
HtmlToPdfVariableElement TextHeaderFooter ou HtmlHeaderFooter

Mapeamento do método de conversão

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

Mapeamento do método de documento PDF

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

Mapeamento de espaços reservados para cabeçalho/rodapé

HiQPdf - Espaço reservado Espaço reservado para IronPDF Descrição
{CrtPage} {page} Número da página atual
{PageCount} {total-pages} Número total de páginas

Exemplos de migração de código

Exemplo 1: Conversão de HTML para 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);
    }
}
// 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);
    }
}
Imports HiQPdf
Imports System

Class Program
    Shared Sub Main()
        Dim htmlToPdfConverter As New HtmlToPdf()
        Dim pdfBuffer As Byte() = htmlToPdfConverter.ConvertUrlToMemory("https://example.com")
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer)

        ' Convert HTML string
        Dim html As String = "<h1>Hello World</h1><p>This is a PDF document.</p>"
        Dim pdfFromHtml As Byte() = htmlToPdfConverter.ConvertHtmlToMemory(html, "")
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml)
    End Sub
End Class
$vbLabelText   $csharpLabel

Apó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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("output.pdf")

        ' Convert HTML string
        Dim html As String = "<h1>Hello World</h1><p>This is a PDF document.</p>"
        Dim pdfFromHtml = renderer.RenderHtmlAsPdf(html)
        pdfFromHtml.SaveAs("fromhtml.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

A abordagem do HiQPdf exige a criação de uma instância de HtmlToPdf, a chamada de ConvertUrlToMemory() ou ConvertHtmlToMemory() para obter um array de bytes e, em seguida, a gravação manual dos bytes em um arquivo. O ChromePdfRenderer do IronPDF retorna um objeto PdfDocument com um método SaveAs() direto, eliminando a etapa de gravação manual em arquivo. O mecanismo Chromium moderno também oferece melhor renderização para conteúdo HTML/CSS/ JavaScript complexo. Consulte a documentação de conversão de HTML para PDF para obter opções de renderização adicionais.

Exemplo 2: Mesclar vários PDFs

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");
    }
}
// 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");
    }
}
Imports HiQPdf
Imports System

Module Program
    Sub Main()
        ' Create first PDF
        Dim converter1 As New HtmlToPdf()
        Dim pdf1 As Byte() = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "")
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1)

        ' Create second PDF
        Dim converter2 As New HtmlToPdf()
        Dim pdf2 As Byte() = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "")
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2)

        ' Merge PDFs
        Dim document1 As PdfDocument = PdfDocument.FromFile("doc1.pdf")
        Dim document2 As PdfDocument = PdfDocument.FromFile("doc2.pdf")
        document1.AddDocument(document2)
        document1.WriteToFile("merged.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Apó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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim renderer = New ChromePdfRenderer()

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

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

        ' Merge PDFs
        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

A abordagem HiQPdf requer o carregamento de documentos de arquivos usando PdfDocument.FromFile(), chamando AddDocument() no primeiro documento para anexar o segundo e, em seguida, usando WriteToFile() para salvar. IronPDF fornece um método estático mais limpo que aceita vários objetos diretamente — sem necessidade de operações intermediárias de arquivo. Saiba mais sobre como mesclar e dividir PDFs .

Exemplo 3: Cabeçalhos e rodapés em PDF com 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);
    }
}
// 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);
    }
}
Imports HiQPdf
Imports System

Class Program
    Shared Sub Main()
        Dim htmlToPdfConverter As New HtmlToPdf()

        ' Add header
        htmlToPdfConverter.Document.Header.Height = 50
        Dim headerHtml As 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
        Dim footerHtml As New HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "")
        htmlToPdfConverter.Document.Footer.Add(footerHtml)

        Dim pdfBuffer As Byte() = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "")
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer)
    End Sub
End Class
$vbLabelText   $csharpLabel

Apó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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()

        ' Configure header and footer
        renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
            .CenterText = "Page Header",
            .FontSize = 12
        }

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

        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>")
        pdf.SaveAs("header-footer.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

A abordagem HiQPdf requer a configuração de Document.Header.Height, a criação de objetos HtmlToPdfVariableElement e a chamada de Add() nas seções de cabeçalho/rodapé. Os marcadores de página usam a sintaxe {CrtPage} e {PageCount}. IronPDF fornece uma configuração mais limpa com propriedades e sintaxe de espaço reservado diferente: e Consulte a documentação sobre cabeçalhos e rodapés para obter opções adicionais, incluindo cabeçalhos baseados em HTML.


Notas críticas sobre migração

Alteração de sintaxe do marcador de posição

A mudança mais importante para documentos com números de página é a sintaxe dos marcadores de posição:

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

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

// IronPDF placeholders
"Page {page} of {total-pages}"
' HiQPdf placeholders
"Page {CrtPage} of {PageCount}"

' IronPDF placeholders
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Mapeamento completo de espaços reservados:

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

Diferença no método de mesclagem

O HiQPdf modifica o primeiro documento no mesmo local:

// HiQPdf: Modifies document1
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");
// HiQPdf: Modifies document1
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");
' HiQPdf: Modifies document1
document1.AddDocument(document2)
document1.WriteToFile("merged.pdf")
$vbLabelText   $csharpLabel

O IronPDF retorna um novo documento mesclado:

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

Sem limite de 3 páginas

A versão gratuita do HiQPdf limita a saída a 3 páginas com marcas d'água. Durante o período de avaliação, o IronPDF gera documentos completos sem limitações artificiais.

Reutilize o ChromePdfRenderer

Ao contrário do HiQPdf, onde você pode criar novas instâncias de HtmlToPdf para cada conversão, as instâncias de ChromePdfRenderer do IronPDF devem ser reutilizadas:

// IronPDF: Create once, reuse
var renderer = new ChromePdfRenderer();
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
// IronPDF: Create once, reuse
var renderer = new ChromePdfRenderer();
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
' IronPDF: Create once, reuse
Dim renderer As New ChromePdfRenderer()
Dim pdf1 = renderer.RenderHtmlAsPdf(html1)
Dim pdf2 = renderer.RenderHtmlAsPdf(html2)
$vbLabelText   $csharpLabel

Solução de problemas

Problema 1: HtmlToPdf não encontrado

Problema: a classe HtmlToPdf não existe no IronPDF.

Solução: Substitua por ChromePdfRenderer:

// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// IronPDF
var renderer = new ChromePdfRenderer();
// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// IronPDF
var renderer = new ChromePdfRenderer();
' HiQPdf
Dim htmlToPdfConverter As New HtmlToPdf()

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

Problema 2: ConvertHtmlToMemory não encontrado

Problema: o método ConvertHtmlToMemory() não existe.

Solução: Use RenderHtmlAsPdf():

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

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
// HiQPdf
byte[] pdfBytes = converter.ConvertHtmlToMemory(html, "");

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
' HiQPdf
Dim pdfBytes As Byte() = converter.ConvertHtmlToMemory(html, "")

' IronPDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim pdfBytes As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

Problema 3: Os marcadores de página não estão funcionando

Problema: {CrtPage} e {PageCount} aparecem literalmente na saída.

Solução: Atualize para a sintaxe de marcador de posição do IronPDF :

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

// IronPDF syntax
"Page {page} of {total-pages}"
// HiQPdf syntax (won't work)
"Page {CrtPage} of {PageCount}"

// IronPDF syntax
"Page {page} of {total-pages}"
' HiQPdf syntax (won't work)
"Page {CrtPage} of {PageCount}"

' IronPDF syntax
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Problema 4: Elemento variável HtmlToPdf não encontrado

Problema: a classe HtmlToPdfVariableElement não existe.

Solução: Use TextHeaderFooter ou HtmlHeaderFooter:

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

// IronPDF
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Header",
    FontSize = 12
};
// HiQPdf
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div>Header</div>", "");
converter.Document.Header.Add(headerHtml);

// IronPDF
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Header",
    FontSize = 12
};
' HiQPdf
Dim headerHtml As New HtmlToPdfVariableElement("<div>Header</div>", "")
converter.Document.Header.Add(headerHtml)

' IronPDF
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
    .CenterText = "Header",
    .FontSize = 12
}
$vbLabelText   $csharpLabel

Lista de verificação para migração

Pré-migração

  • Inventariar todas as chamadas da API HiQPdf no código-fonte.
  • Documente os tamanhos de página, margens e configurações atuais.
  • Identificar configurações de cabeçalho/rodapé e espaços reservados
  • Obtenha a chave de licença do IronPDF
  • Testar o IronPDF em ambiente de desenvolvimento

Migração de código

  • Remover todos os pacotes NuGet do HiQPdf (todas as variantes)
  • Instale o pacote NuGet IronPDF : dotnet add package IronPdf
  • Atualizar importações de namespace
  • Substitua HtmlToPdf por ChromePdfRenderer
  • Converter ConvertHtmlToMemory() para RenderHtmlAsPdf()
  • Converter ConvertUrlToMemory() para RenderUrlAsPdf()
  • Atualizar espaços reservados de cabeçalho/rodapé ({CrtPage}{page}, {PageCount}{total-pages})
  • Substitua HtmlToPdfVariableElement por TextHeaderFooter
  • Atualizar operações de mesclagem (AddDocumentPdfDocument.Merge)
  • Adicionar inicialização da chave de licença na inicialização do sistema

Testando

  • Teste de conversão de HTML para PDF
  • Teste de conversão de URL para PDF
  • Verificar a renderização do cabeçalho/rodapé
  • Verificar os marcadores de página
  • Teste de fusão de PDFs
  • Teste páginas com uso intensivo de JavaScript (agora compatível com o Chromium)

Pós-migração

  • Remover o número de série do HiQPdf da configuração
  • Atualizar documentação
  • Monitore quaisquer diferenças de renderização.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim