COMPARAçãO

HiQPDF vs IronPDF: Guia de Comparação Técnica

Quando os desenvolvedores .NET avaliam soluções de HTML para PDF, oHiQPdfdestaca-se como uma biblioteca comercial utilizando renderização baseada em WebKit. Embora oHiQPdfsuporte HTML5/CSS3, seu motor WebKit mais antigo pode ter dificuldades com frameworks JavaScript modernos, e a versão gratuita é limitada a 3 páginas com marcas d'água notáveis. Em contraste, oIronPDFusa um motor de renderização moderno baseado em Chromium, oferecendo suporte completo a JavaScript e um pacote unificado em todas as plataformas .NET.

Esta comparação avalia ambas as bibliotecas em aspectos técnicos relevantes para ajudar desenvolvedores e arquitetos profissionais a tomarem decisões informadas sobre suas necessidades de PDF for .NET.

Visão Geral do HiQPdf

HiQPdf é uma biblioteca comercial de HTML para PDF que utiliza um mecanismo de renderização baseado em WebKit. A principal classe de conversão da biblioteca, HtmlToPdf, inclui métodos como ConvertHtmlToMemory() e ConvertUrlToMemory() que retornam dados brutos byte[]. A configuração é gerida através de cadeias de propriedades no objeto Document, como Document.Header, Document.Footer, e Document.PageSize.

A versão gratuita doHiQPdfimpõe uma limitação significativa — máximo de 3 páginas nos saídas de PDF com uma marca d'água intrusiva, tornando testes completos em documentos maiores desafiadores durante a avaliação. A biblioteca oferece múltiplas variantes de pacotes NuGet para diferentes plataformas (HiQPdf, HiQPdf.Free, HiQPdf.NetCore, HiQPdf.NetCore.x64, HiQPdf.Client), e a documentação não especifica claramente suporte ao .NET Core ou .NET 5+.

Para cabeçalhos e rodapés, oHiQPdfutiliza objetos HtmlToPdfVariableElement adicionados a coleções Document.Header e Document.Footer. Os espaços reservados para números de página usam a sintaxe {CrtPage} para a página atual e {PageCount} para o total de páginas.

Visão geral do IronPDF

IronPDF é uma biblioteca de PDF for .NET que utiliza um motor de renderização moderno de Chromium, oferecendo suporte completo para frameworks HTML5, CSS3 e JavaScript, incluindo React, Angular e Vue. A principal classe de renderização da biblioteca, ChromePdfRenderer, inclui métodos como RenderHtmlAsPdf() e RenderUrlAsPdf() que retornam objetos PdfDocument.

IronPDF oferece um único pacote NuGet unificado para todas as plataformas com compatibilidade documentada for .NET 6, 7, 8, 9, e 10. A configuração utiliza propriedades RenderingOptions diretamente no renderizador. Cabeçalhos e rodapés podem utilizar TextHeaderFooter com propriedades como CenterText e FontSize. Os espaços reservados para números de página usam a sintaxe {page} e {total-pages}.

Comparação de Motor de Renderização e Compatibilidade

A diferença fundamental entre essas bibliotecas reside em seus motores de renderização e suporte a plataformas.

Aspecto HiQPdf IronPDF
Motor de renderização Baseado em WebKit (versão mais antiga) Cromo moderno
Camada Gratuita Limite de 3 páginas + marca d'água Teste completo de 30 dias
Suporte Moderno a JS Limitado Completo (React, Angular, Vue)
Suporte a .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 Completo
Pacote NuGet Múltiplas variantes Pacote único

O motor baseado em WebKit doHiQPdfé uma tecnologia mais antiga que pode enfrentar desafios com frameworks JavaScript modernos e estruturas de HTML complexas. O motor Chromium doIronPDFoferece a mesma qualidade de renderização do Google Chrome, garantindo uma conversão precisa de conteúdo web moderno.

Comparação de código: operações comuns em PDF

Conversão de HTML e URL para PDF

As operações mais fundamentais demonstram as diferenças de design da 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);
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

HiQPdf cria um conversor HtmlToPdf, chama ConvertUrlToMemory() ou ConvertHtmlToMemory() para obter dados brutos byte[] e, em seguida, escreve manualmente no disco usando File.WriteAllBytes(). O método ConvertHtmlToMemory() requer um segundo parâmetro para a URL base (string vazia se não for necessária).

IronPDF cria um ChromePdfRenderer, chama RenderUrlAsPdf() ou RenderHtmlAsPdf() para obter um objeto PdfDocument, e então salva diretamente com SaveAs(). A API é mais concisa com manipulação de documentos orientada a objetos.

Para opções avançadas de renderização HTML, explore o guia de conversão de HTML para PDF .

Unir vários PDFs

A fusão de PDFs demonstra as diferentes abordagens para manipulação 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");
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

HiQPdf requer salvar os PDFs no disco primeiro, carregá-los com PdfDocument.FromFile(), depois usar AddDocument() para anexar um ao outro e finalmente usar WriteToFile() para salvar o resultado. Isso modifica o primeiro documento no local.

IronPDF pode mesclar documentos diretamente na memória usando o método estático PdfDocument.Merge(), que retorna um novo documento mesclado. Essa abordagem é mais limpa e não requer I/O de arquivo intermediário.

Cabeçalhos e rodapés com números de página

A configuração de cabeçalhos e rodapés mostra as diferentes abordagens para conteúdo 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);
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

HiQPdf configura cabeçalhos e rodapés através das propriedades Document.Header e Document.Footer, configurando Height e adicionando objetos HtmlToPdfVariableElement. Os espaços reservados para números de página usam {CrtPage} para a página atual e {PageCount} para o total de páginas.

IronPDF usa RenderingOptions.TextHeader e RenderingOptions.TextFooter com objetos TextHeaderFooter. Propriedades como CenterText e FontSize fornecem configuração direta. Os espaços reservados para números de página usam {page} e {total-pages}.

Saiba mais sobre a configuração de cabeçalhos e rodapés nos tutoriais do IronPDF.

Referência de Mapeamento de API

Para desenvolvedores avaliando a migração doHiQPdfou comparando capacidades, esse mapeamento mostra operações equivalentes:

Mapeamento da Classe Principal

ClasseHiQPdf ClasseIronPDF
HtmlToPdf ChromePdfRenderer
PdfDocument PdfDocument
PdfPage pdf.Pages[i]
PdfDocumentControl RenderingOptions
PdfDocument / PdfPage HtmlHeaderFooter
PdfFooter / PdfDocumentFooter HtmlHeaderFooter
HtmlToPdfVariableElement HtmlHeaderFooter.HtmlFragment

Mapeamento do método de conversão

MétodoHiQPdf MétodoIronPDF
ConvertHtmlToMemory(html, baseUrl) RenderHtmlAsPdf(html, baseUrl)
ConvertUrlToMemory(url) RenderUrlAsPdf(url)
ConvertHtmlToFile(html, baseUrl, path) RenderHtmlAsPdf(html).SaveAs(path)
ConvertUrlToFile(url, path) RenderUrlAsPdf(url).SaveAs(path)

Mapeamento de Propriedades

PropriedadeHiQPdf PropriedadeIronPDF
BrowserWidth RenderingOptions.ViewPortWidth
BrowserHeight RenderingOptions.ViewPortHeight
Document.PageSize RenderingOptions.PaperSize
Document.PageOrientation RenderingOptions.PaperOrientation
Document.Margins.Top RenderingOptions.MarginTop
Document.Margins.Bottom RenderingOptions.MarginBottom
Document.Margins.Left RenderingOptions.MarginLeft
Document.Margins.Right RenderingOptions.MarginRight
Document.Header.Height HtmlHeader.MaxHeight
Document.Footer.Height HtmlFooter.MaxHeight
SerialNumber IronPdf.License.LicenseKey

Mapeamento de Sintaxe de Placeholder

Os placeholders de cabeçalhos e rodapés diferem entre as bibliotecas:

HiQPdf IronPDF
{CrtPage} {page}
{PageCount} {total-pages}
{CrtPageUri} {url}
{CrtPageTitle} {html-title}

Resumo da comparação de recursos

Recurso HiQPdf IronPDF
Renderização Chromium ❌ (WebKit)
JavaScript Moderno (React, Angular, Vue) ⚠️ Quantidade limitada
Suporte completo ao CSS3 ⚠️ Parcial
Suporte .NET 6/7/8/9/10 ⚠️ Documentação pouco clara
Pacote único do NuGet ❌ (Múltiplas variantes)
Teste completo gratuito ❌ (limite de 3 páginas + marca d'água) ✅ (30 dias)
HTML para PDF
URL para PDF
Fusão de PDFs ✅(AddDocument) ✅(Merge)
Cabeçalhos/Rodapés ✅(HtmlToPdfVariableElement) ✅(TextHeaderFooter)

Quando Equipes Consideram Mudar doHiQPdfpara o IronPDF

As equipes de desenvolvimento avaliam a transição doHiQPdfpara oIronPDFpor várias razões:

Versão Gratuita Restritiva: A versão gratuita doHiQPdfimpõe um limite de 3 páginas com marcas d'água intrusivas, tornando-o essencialmente inutilizável para produção e difícil de avaliar completamente. OIronPDFoferece um teste completo de 30 dias sem limites de páginas.

Mecanismo WebKit Antigo: O mecanismo de renderização baseado em WebKit doHiQPdftem dificuldades com frameworks JavaScript modernos como React, Angular e Vue. O mecanismo Chromium doIronPDFfornece a mesma qualidade de renderização que o Google Chrome, garantindo conversão precisa de conteúdo web moderno e complexo.

Suporte pouco claro ao .NET Core: A documentação doHiQPdfnão esclarece explicitamente o suporte ao .NET Core ou .NET 5+, e a biblioteca requer pacotes NuGet separados para diferentes plataformas. OIronPDFfornece um único pacote unificado com suporte documentado for .NET 6, 7, 8, 9 e 10.

Pacotes NuGet Fragmentados: OHiQPdfrequer diferentes variantes de pacotes (HiQPdf, HiQPdf.Free, HiQPdf.NetCore, HiQPdf.NetCore.x64, HiQPdf.Client) para diferentes cenários. OIronPDFusa um único pacote para todas as plataformas.

Design de API Complexo:HiQPdfrequer uma configuração detalhada através de cadeias de propriedades como Document.Header.Height e Document.Footer.Add(). A API fluente doIronPDFcom propriedades RenderingOptions proporciona uma configuração mais limpa.

Sintaxe Diferente para Espaços Reservados:HiQPdfusa espaços reservados {CrtPage} e {PageCount}, enquantoIronPDFusa {page} e {total-pages}. A migração requer a atualização de todos os modelos de cabeçalho/rodapé.

Pontos fortes e considerações

Pontos Fortes do HiQPdf

  • Suporte ao HTML5/CSS3: Oferece capacidades de renderização HTML5 e CSS3
  • Biblioteca Estabelecida: Biblioteca comercial com base de usuários existente

Considerações sobre o HiQPdf

  • Mecanismo WebKit: Tecnologia de renderização antiga com suporte limitado ao JavaScript moderno
  • Limite de 3 Páginas: Versão gratuita significativamente restrita
  • Pacotes Fragmentados: Múltiplos pacotes NuGet para diferentes plataformas
  • Suporte ao .NET Pouco Claro: Documentação não esclarece explicitamente a compatibilidade com .NET moderno
  • Cadeias de Propriedades Complexas: Configuração verbosa por meio de propriedades aninhadas
  • Unidades Baseadas em Pontos: Usa pontos (72 por polegada) para medições

Pontos fortes do IronPDF

  • Mecanismo Chromium: Renderização moderna com suporte completo ao JavaScript
  • Pacote Unificado: Pacote único do NuGet para todas as plataformas
  • Teste Completo: Teste completo de 30 dias com todos os recursos
  • Suporte ao .NET Moderno: Documentado for .NET 6, 7, 8, 9, 10
  • API Limpa: Configuração fluente RenderingOptions
  • Recursos abrangentes: tutoriais e documentação extensivos

Considerações sobre o IronPDF

  • Licença Comercial: Necessária para uso em produção.
  • Unidades em Milímetros: Usa milímetros em vez de pontos para margens

Conclusão

HiQPdf eIronPDFrepresentam diferentes gerações de tecnologia de conversão de HTML para PDF em aplicações .NET. O motor baseado em WebKit doHiQPdfoferece suporte básico a HTML5/CSS3, mas tem dificuldades com frameworks JavaScript modernos e oferece compatibilidade pouco clara com .NET Core e vários pacotes fragmentados. O limite de 3 páginas na versão gratuita restringe significativamente a avaliação.

OIronPDFoferece uma alternativa moderna baseada em Chromium com suporte completo ao JavaScript para aplicações React, Angular e Vue. O pacote único e unificado do NuGet com suporte documentado for .NET 6/7/8/9/10 simplifica a implantação, e o design de API limpa reduz a complexidade de configuração.

À medida que as organizações planejam para o .NET 10, C# 14, e desenvolvimento de aplicações até 2026, a escolha entre renderização WebKit antiga com pacotes fragmentados e renderização Chromium moderna com suporte unificado impacta significativamente tanto a velocidade de desenvolvimento quanto a qualidade do resultado final. Equipes que precisam de suporte a frameworks JavaScript modernos, clara compatibilidade com .NET ou gerenciamento de pacotes simplificado acharão queIronPDFatende efetivamente a esses requisitos.

Comece a avaliar oIronPDFcom um teste gratuito e explore a documentação completa para verificar se ele atende às suas necessidades específicas.