Ir para o conteúdo do rodapé
COMPARAçãO DE PRODUTOS

Como converter HTML para PDF em C# para .NET 10 usando o IronPDF

O problema da biblioteca PDF em C# que deu início a tudo.

 IronPDF

Em 2016, nossa equipe de consultoria na Iron Software estava atolada em verdadeiros pesadelos de conversão de HTML para PDF . Fomos contratados para modernizar a geração de documentos para um cliente da lista Fortune 500, e todas as bibliotecas que experimentamos eram um desastre anunciado. Cada "solução" parecia promissora a princípio, mas assim que a complexidade do mundo real surgia — conteúdo dinâmico, layouts CSS3, páginas com muito JavaScript — as bibliotecas falhavam silenciosamente ou travavam de forma espetacular.

Jeff Fritz resumiu isso perfeitamente durante uma conferência recente sobre .NET :

"O cenário de geração de PDFs em .NET era um cemitério de projetos abandonados e soluções incompletas."

Ele não estava exagerando. Sabíamos disso por experiência própria, pois tínhamos testado quase todas as bibliotecas disponíveis no mercado, desde as que mal recebiam manutenção até as que tinham apresentações de vendas corporativas chamativas. Após meses de tentativas, erros e muita frustração, ficou dolorosamente claro: as soluções existentes simplesmente não conseguiam atender às exigências modernas.

É aqui que começa a história do IronPDF — nascido da necessidade, impulsionado pelas falhas de todas as alternativas que tentamos.

Por que as soluções existentes falharam (e ainda falham)

Para ser franco: criamos o IronPDF porque tudo o mais estava com problemas, e mesmo oito anos depois, a maioria ainda está. As falhas nem sempre foram técnicas; Eram questões legais, arquitetônicas e, às vezes, pura loucura.

Eis o que encontramos em nosso trabalho de consultoria, com código real que demonstra por que essas "soluções" nos levaram a construir algo melhor.

A Grande Troca Enganosa da Biblioteca PDF em C

Vamos começar com as bibliotecas que mudaram suas licenças depois que os desenvolvedores criaram aplicativos inteiros em torno delas:

iTextSharp – A biblioteca "gratuita" que na verdade não é.

Em 2009, o iTextSharp foi promovido como uma biblioteca PDF gratuita e de código aberto. Na época, era distribuído sob a licença LGPL, o que parecia uma escolha razoável para os desenvolvedores. No entanto, em 2012, os termos da licença mudaram para AGPL. Sob a licença AGPL, os desenvolvedores enfrentavam uma escolha difícil: ou disponibilizavam o código-fonte completo de sua aplicação ou pagavam por uma licença comercial.

Avançando para 2025, uma licença comercial do iText pode custar milhares de dólares — geralmente em torno de US$ 2.500 por servidor. Isso criou o que muitos desenvolvedores chamam de "armadilha da AGPL": use o iTextSharp e tenha que liberar todo o código-fonte ou pagar uma taxa de licenciamento significativa.

Além das questões de licenciamento, o iText não oferece conversão nativa de HTML para PDF pronta para uso. Não existe um método simples RenderHtml(html). Em vez disso, os desenvolvedores precisam recorrer a componentes adicionais, como o XMLWorker ou o complemento pdfHTML, que trazem suas próprias dependências e maior complexidade de licenciamento.

Essa combinação de licenciamento restritivo e a falta de suporte integrado para conversão de HTML em PDF é o motivo pelo qual muitas equipes evitam o iTextSharp atualmente.

O iTextSharp não está sozinho. QuestPDF era outra armadilha: amplamente promovido online como "a melhor biblioteca PDF em C#", mas não oferece suporte algum à conversão de HTML para PDF. Os desenvolvedores passaram dias tentando forçá-lo a funcionar em fluxos de trabalho para os quais ele simplesmente não foi projetado.

QuestPDF – A biblioteca que não faz o que você pensa.

QuestPDF é frequentemente promovido online, especialmente em comunidades do Reddit, como uma das melhores bibliotecas de PDF para C#. No entanto, existe uma limitação importante que nem sempre é óbvia: o QuestPDF não oferece nenhum suporte para conversão de HTML para PDF.

Em vez de renderizar HTML, o QuestPDF exige que os desenvolvedores construam documentos programaticamente usando sua API fluente. Por exemplo, você define páginas, contêineres e blocos de texto diretamente no código C#. Embora seja uma ferramenta poderosa para certos casos de uso, a sensação é mais parecida com a de diagramar documentos manualmente — quase como criar PDFs "do jeito difícil" em vez de simplesmente converter um HTML existente.

O licenciamento é outro fator a ser considerado. A chamada "licença comunitária" é a AGPL, que obriga você a disponibilizar o código aberto de todo o seu projeto ou a adquirir uma licença comercial. Os preços comerciais variam aproximadamente de US$ 699 a US$ 7.999, o que pode parecer caro para uma biblioteca que não inclui a conversão de HTML para PDF de forma nativa.

Devido a essas limitações, o QuestPDF pode não ser a solução ideal para desenvolvedores que buscam especificamente uma conversão de HTML para PDF simples e confiável em .NET.

O desastre do wkhtmltopdf (2016-2024)

Utilizar a função WkHtmlToPdf em produção era notoriamente problemático. Todas as embalagens ao redor pareciam seguir o mesmo padrão frustrante:

  1. Copie um arquivo binário misterioso para o servidor.
  2. Espero que as dependências nativas corretas tenham sido instaladas.
  3. Observe o sistema falhar de forma imprevisível durante a produção.

Mesmo quando se tinha uma embalagem protetora, a confiabilidade estava longe de ser garantida. Os desenvolvedores frequentemente se deparavam com erros como:

  • "Não foi possível carregar a DLL 'wkhtmltox'"
  • "Violação de acesso no endereço 0x00000000"
  • "O aplicativo parou de funcionar"
  • "Qt: Não foi possível inicializar o OLE (erro 80010106)"

Essas falhas frequentemente exigiam intervenção manual. Em alguns casos, as equipes chegaram a recorrer à reinicialização do pool de aplicativos apenas para que o processo voltasse a funcionar — uma solução frágil e insustentável.

Essa instabilidade, combinada com o processo de implantação complicado, fez do WkHtmlToPdf uma escolha arriscada para cargas de trabalho de produção sérias.

Em 2024, o wkhtmltopdf foi finalmente abandonado. Todas as bibliotecas PDF em C# construídas com base nisso se tornaram dívida técnica instantânea:

  • TuesPechkin - Última atualização em 2015; as afirmações sobre multithreading eram ficção.
  • Rotativa - Exclusivamente MVC, ainda distribuindo binários obsoletos em 2025
  • DinkToPdf - O fork "compatível com .NET Core " que na verdade não era.
  • Haukcode.DinkToPdf - Uma variante de uma variante morta
  • NReco.PdfGenerator - Cobrando mais de US$ 150 para empacotar software abandonado
  • OpenHtmlToPdf - O nome sugere que é diferente, mas não é.

Os desenvolvedores que tentavam converter HTML para PDF em C# usando wrappers do wkhtmltopdf tinham que gerenciar constantemente permissões de arquivo, URLs relativas e dependências binárias. A geração de documentos PDF para páginas web inteiras era instável, e as quebras de página dentro de elementos HTML eram imprevisíveis.

O pesadelo do "Basta usar o Chrome"

Em seguida, surgiu a turma da automação de navegadores. "É só usar o Puppeteer!", disseram eles. Embora o PuppeteerSharp e o Playwright possam tecnicamente gerar PDFs, eles não são bibliotecas C# para PDF propriamente ditas. Eles exigem binários de navegador pesados, implantação complexa e não possuem recursos de conformidade como PDF/A ou PDF/UA.

Eis como isso realmente se pareceu:

// PuppeteerSharp - The "Simple" Solution That Wasn't
public class PuppeteerNightmare
{
    private Browser _browser;

    public async Task Initialize()
    {
        // Step 1: Download 300MB of Chrome
        await new BrowserFetcher().DownloadAsync();
        // Customer: "Why is your app 300MB?"
        // Us: "Uh... for PDFs?"

        // Step 2: Launch Chrome with magic arguments nobody understands
        _browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true,
            Args = new[] 
            { 
                "--no-sandbox",
                "--disable-setuid-sandbox",
                "--disable-dev-shm-usage",
                "--disable-gpu",
                "--no-first-run",
                "--no-zygote",
                "--single-process"
            }
        });
    }

    public async Task<byte[]> GeneratePdf(string html)
    {
        // This works great until:
        // 1. Chrome auto-updates and breaks your args
        // 2. You need to generate 100 PDFs simultaneously
        // 3. You deploy to Azure Functions (spoiler: it won't work)
        // 4. A memory leak eats 5GB of RAM

        var page = await _browser.NewPageAsync();
        await page.SetContentAsync(html);

        // Wait for... something? Nobody knows the right value
        await Task.Delay(1000); 

        return await page.PdfDataAsync();
    }
}
// PuppeteerSharp - The "Simple" Solution That Wasn't
public class PuppeteerNightmare
{
    private Browser _browser;

    public async Task Initialize()
    {
        // Step 1: Download 300MB of Chrome
        await new BrowserFetcher().DownloadAsync();
        // Customer: "Why is your app 300MB?"
        // Us: "Uh... for PDFs?"

        // Step 2: Launch Chrome with magic arguments nobody understands
        _browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true,
            Args = new[] 
            { 
                "--no-sandbox",
                "--disable-setuid-sandbox",
                "--disable-dev-shm-usage",
                "--disable-gpu",
                "--no-first-run",
                "--no-zygote",
                "--single-process"
            }
        });
    }

    public async Task<byte[]> GeneratePdf(string html)
    {
        // This works great until:
        // 1. Chrome auto-updates and breaks your args
        // 2. You need to generate 100 PDFs simultaneously
        // 3. You deploy to Azure Functions (spoiler: it won't work)
        // 4. A memory leak eats 5GB of RAM

        var page = await _browser.NewPageAsync();
        await page.SetContentAsync(html);

        // Wait for... something? Nobody knows the right value
        await Task.Delay(1000); 

        return await page.PdfDataAsync();
    }
}
Imports PuppeteerSharp

Public Class PuppeteerNightmare
    Private _browser As Browser

    Public Async Function Initialize() As Task
        ' Step 1: Download 300MB of Chrome
        Await (New BrowserFetcher()).DownloadAsync()
        ' Customer: "Why is your app 300MB?"
        ' Us: "Uh... for PDFs?"

        ' Step 2: Launch Chrome with magic arguments nobody understands
        _browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {
            .Headless = True,
            .Args = {
                "--no-sandbox",
                "--disable-setuid-sandbox",
                "--disable-dev-shm-usage",
                "--disable-gpu",
                "--no-first-run",
                "--no-zygote",
                "--single-process"
            }
        })
    End Function

    Public Async Function GeneratePdf(html As String) As Task(Of Byte())
        ' This works great until:
        ' 1. Chrome auto-updates and breaks your args
        ' 2. You need to generate 100 PDFs simultaneously
        ' 3. You deploy to Azure Functions (spoiler: it won't work)
        ' 4. A memory leak eats 5GB of RAM

        Dim page = Await _browser.NewPageAsync()
        Await page.SetContentAsync(html)

        ' Wait for... something? Nobody knows the right value
        Await Task.Delay(1000)

        Return Await page.PdfDataAsync()
    End Function
End Class
$vbLabelText   $csharpLabel

Além da forte dependência do Chrome, os desenvolvedores enfrentaram desafios com conteúdo dinâmico, suporte a CSS e CSS de impressão para conversão de HTML em PDF. A automatização de páginas web desta forma frequentemente resultava em quebras de página incorretas, grande consumo de memória e tamanhos de página PDF imprevisíveis.

Bibliotecas comerciais de PDF em C# que não valiam a pena

Avaliamos todas as bibliotecas comerciais de HTML para PDF em C#. Em teoria, essas bibliotecas pareciam promissoras, mas na prática, todas apresentavam custos ocultos, limitações ou tecnologia obsoleta. Eis o que você geralmente conseguia comprar com US$ 500 a US$ 5.000:

GemBox.Document – ​​O Contador de Parágrafos

O GemBox.Document se anuncia como gratuito, mas apenas para até 20 parágrafos. A pegadinha é que cada célula da tabela também conta como um parágrafo. Portanto, se você criar algo tão simples quanto uma tabela 5x5, isso já equivale a 25 parágrafos — e você ainda terá que pagar por uma licença.

A versão completa do GemBox.Document custa cerca de US$ 680, e isso é apenas para a conversão básica de HTML para PDF. Devido às rígidas limitações da versão gratuita e ao custo da licença completa, escalar projetos com esta biblioteca torna-se rapidamente difícil.

SelectPdf – A mentira do "compatibilidade multiplataforma"

O SelectPdf é frequentemente apresentado como uma solução multiplataforma de HTML para PDF, mas, na realidade, funciona apenas no Windows. Os desenvolvedores que compram uma licença — que custa a partir de US$ 499 — descobrem rapidamente que a biblioteca não é compatível com Linux ou macOS.

A versão gratuita também é bastante restrita. Permite gerar até cinco páginas; A partir da página seis, uma grande marca d'água com os dizeres "COMPRE UMA LICENÇA" é impressa em toda a impressão.

Essas limitações tornam o SelectPdf uma escolha arriscada para desenvolvedores que esperam suporte multiplataforma completo ou que desejam testar a biblioteca sem se deparar imediatamente com barreiras de pagamento.

EO.Pdf – A Bagagem do Legado

O arquivo EO.Pdf tem um preço elevado de US$ 799 para uma biblioteca que carrega consigo um histórico significativo de conteúdo problemático. Originalmente, dependia do Internet Explorer como mecanismo de renderização. Mais recentemente, passou a usar o Chrome, mas isso resulta em um tamanho considerável de 126 MB. Apesar das alegações de suporte multiplataforma, o EO.Pdf permanece predominantemente centrado no Windows.

Tecnicamente, o método HtmlToPdf.ConvertHtml(html, pdfStream) funciona, mas, dados o custo e as limitações, o EO.Pdf não é considerado uma solução economicamente viável para lidar com recursos HTML modernos.

HiQPdf – A Maravilha de Três Páginas

O HiQPdf se promove como tendo uma versão gratuita, mas na realidade é bastante limitada: você só pode gerar até três páginas. Assim que você chega à página quatro, uma grande marca d'água é aplicada em todo o documento.

Se você quiser remover a limitação, precisará adquirir uma licença comercial, que custa a partir de US$ 595.

Na prática, isso torna a versão gratuita útil apenas para documentos muito pequenos. Qualquer coisa maior que isso rapidamente atinge o limite de páginas, forçando os desenvolvedores a optarem por uma atualização paga.

Spire.PDF – Quando as imagens não são realmente PDFs

O Spire.PDF anuncia a conversão de HTML para PDF, mas na prática, muitas vezes "converte" HTML simplesmente tirando uma captura de tela. O resultado é um PDF grande — às vezes de 10 MB — onde o texto não é selecionável. Os usuários frequentemente perguntam: "Por que não consigo pesquisar no PDF?" A resposta é simples: porque, na verdade, trata-se apenas de uma imagem incorporada ao PDF, e não de texto propriamente dito.

O método LoadFromHTML recebe vários parâmetros booleanos, mas sua finalidade não é clara, e a documentação oficial oferece pouca orientação. Em muitos casos, a única maneira de obter esclarecimentos é entrar em contato com o departamento de vendas.

Essa abordagem torna o Spire.PDF problemático para qualquer pessoa que precise de PDFs pesquisáveis, copiáveis ​​ou com estrutura adequada.

ABCpdf – O Labirinto do Licenciamento

O ABCpdf anuncia uma "licença gratuita", mas, na realidade, é necessário registrá-la, ela tem prazo de validade e adiciona marcas d'água. A versão completa depende do mecanismo Gecko (uma versão desatualizada do Firefox) ou do Trident (Internet Explorer). Surpreendentemente, mesmo em 2025, o Internet Explorer ainda é oferecido como opção de renderização.

Ao usar o ABCpdf, adicionar conteúdo HTML significa que você fica limitado a esses mecanismos de renderização mais antigos. Por exemplo, chamar AddImageHtml(html) renderizará usando o IE ou o mecanismo desatualizado do Firefox, dependendo da sua escolha.

ExpertPdf – O Especialista em Ser Caro

O ExpertPdf tem um preço elevado, variando de US$ 550 a US$ 1.200. E o que você recebe por esse valor? Essencialmente, uma interface que envolve uma versão antiga do Chrome, juntamente com uma documentação que não é atualizada desde 2018.

Winnovative – Inovação interrompida em 2016

O conversor de HTML para PDF da Winnovative ainda é baseado em um mecanismo WebKit de 2016. Apesar do nome, a biblioteca não acompanhou os padrões modernos da web. Os preços variam de US$ 750 a US$ 1.600 para tecnologias que datam da época em que Obama era presidente.

O conversor não suporta CSS Grid nem recursos modernos de JavaScript . Embora possa gerar PDFs, está claramente desatualizado em comparação com as soluções atuais de conversão de HTML para PDF.

PDFmyURL – Nem sequer uma biblioteca

PDFmyURL não é uma biblioteca C# verdadeira; É essencialmente apenas um wrapper de API. Ao usar esse serviço, você está pagando para que seus documentos sejam processados ​​no servidor de terceiros, o que pode ser problemático caso seus documentos sejam confidenciais. O custo mínimo é de US$ 39 por mês.

Funcionalmente, usar o PDFmyURL em C# significa fazer requisições HTTP ao serviço web deles — você não está trabalhando com uma biblioteca local. Por exemplo, você envia um URL para o endpoint da API deles e recebe um PDF como resposta. Embora possa gerar PDFs, não é uma biblioteca C# independente para PDFs, mas sim um serviço web que requer acesso à rede.

GrabzIt – Capturas de tela, não PDFs

O GrabzIt foi originalmente projetado para capturar screenshots de sites. A geração de PDFs é mais uma ideia secundária do que uma funcionalidade principal. O serviço cobra por captura e não oferece uma solução completa de conversão de HTML para PDF em C#.

PDF Duo .NET – A Biblioteca Misteriosa

O PDF Duo .NET afirma funcionar sem a necessidade de DLLs adicionais. Na realidade, é amplamente desconhecido e não utilizado pela comunidade de desenvolvedores. A documentação é praticamente inexistente e o fórum de suporte tem apenas algumas postagens, todas datando de 2019.

Mesmo quando essas bibliotecas funcionavam tecnicamente, elas apresentavam limitações práticas:

  • A maioria das versões gratuitas possui muitas limitações (limites de páginas, marcas d'água, recursos restritos).
  • O licenciamento muitas vezes esconde custos extras ou cláusulas restritivas.
  • Os mecanismos de busca estão desatualizados (IE, versões antigas do Chrome, WebKit 2016) e apresentam falhas com HTML/CSS modernos.
  • O suporte multiplataforma é enganoso ou incompleto.
  • A implementação em larga escala exige soluções alternativas e depuração adicional.

Resumindo, as bibliotecas comerciais costumam parecer atraentes no papel, mas criam dívida técnica em produção, forçando as equipes a gastar muito dinheiro ou, eventualmente, a migrar para uma biblioteca como o IronPDF , que "simplesmente funciona".

As soluções "gratuitas" em C# para PDF que custam tudo

Às vezes, "grátis" não é realmente grátis. Muitas bibliotecas de PDF de código aberto ou "de avaliação" em C# vêm com custos ocultos — seja em tempo de desenvolvimento perdido, suporte incompleto para conversão de HTML em PDF ou armadilhas sutis de licenciamento. Você pode pensar que está economizando dinheiro, mas a realidade é que serão meses de depuração e soluções alternativas.

HtmlRenderer.PdfSharp – Bem-vindo a 2005

HtmlRenderer.PdfSharp suporta apenas CSS muito antigo — basicamente o que existia na época de George W. Bush era presidente. Recursos modernos de CSS, como flexbox, layouts em grade ou border-radius, não são suportados. Qualquer tentativa de utilizá-los falhará.

Para formatar o conteúdo, você precisa usar layouts tradicionais baseados em tabelas, semelhantes à forma como as páginas da web eram construídas em 1999. Frameworks ou bibliotecas HTML modernas, como o Bootstrap, não funcionarão, e o JavaScript não é suportado de forma alguma.

Se você tentar renderizar HTML moderno, a biblioteca pode falhar ou produzir resultados incorretos, tornando-a inadequada para as necessidades atuais de conversão de web para PDF.

PdfSharp – A Biblioteca Que Todos Confundem

PdfSharp é uma biblioteca robusta para a criação programática de PDFs. No entanto, não converte HTML para PDF. Se você deseja a funcionalidade de conversão de HTML para PDF, precisa usar uma biblioteca adicional como a HtmlRenderer.PdfSharp. O problema é que a HtmlRenderer.PdfSharp não é atualizada desde 2019, então pode estar desatualizada ou não confiável.

Com o PdfSharp, você desenha principalmente formas, texto e gráficos manualmente. Por exemplo, você pode criar um novo documento PDF, adicionar páginas e desenhar linhas ou formas nelas, mas isso é muito diferente de renderizar conteúdo HTML em um PDF.

HTMLDOC – Da era da bolha da internet

O HTMLDOC é licenciado sob a GPL, o que o torna "viral" em termos de licenciamento. A última atualização significativa da biblioteca foi em 2001, portanto ela não acompanhou os padrões modernos. Não lida corretamente com CSS e só funciona pela linha de comando. A documentação ainda faz referência ao Netscape.

Para gerar um PDF, você executa um comando como htmldoc --webpage -f output.pdf input.html. Em outras palavras, usar HTMLDOC hoje em dia é um retrocesso ao final da década de 1990.

Embora essas bibliotecas "gratuitas" possam parecer atraentes para a conversão de HTML para PDF em projetos pequenos, elas geralmente falham ao lidar com:

  • Conteúdo web completo: Páginas HTML dinâmicas, CSS moderno, trechos de JavaScript .
  • Compatibilidade com PDF: Sem suporte para PDF/A, PDF/UA ou acessibilidade.
  • Permissões de arquivo e campos de formulário: Limitadas ou inexistentes.
  • Implantação multiplataforma: Algumas funcionam apenas no Windows ou dependem dos mecanismos do Internet Explorer.

Tentar renderizar páginas web inteiras com essas ferramentas geralmente resulta em conteúdo HTML parcial, layouts quebrados ou PDFs que são essencialmente capturas de tela em vez de documentos estruturados e pesquisáveis. Os desenvolvedores logo percebem que o "gratuito" vem com o custo oculto de horas perdidas depurando, soluções alternativas manuais e resultados inconsistentes — tudo isso por uma biblioteca que deveria facilitar suas vidas.

O IronPDF foi desenvolvido especificamente para resolver esses problemas, oferecendo métodos robustos para gerar documentos PDF a partir de arquivos HTML, strings ou conteúdo web dinâmico, com suporte adequado a CSS, tratamento de quebras de página e integração perfeita em aplicações .NET .

Compatibilidade com Bootstrap e frameworks CSS modernos

Um fator crucial na escolha de uma biblioteca de conversão de HTML para PDF é a sua compatibilidade com Bootstrap e frameworks CSS modernos. Muitas aplicações web dependem do Bootstrap para design responsivo, e a capacidade de converter essas interfaces para PDF sem modificações é essencial para gerar relatórios, faturas e documentação que correspondam à aparência da sua aplicação web.

IronPDF: Suporte completo ao framework moderno

  • Bootstrap 5: Sistema completo de layout flexbox, CSS Grid, classes utilitárias e todas as bibliotecas de componentes.
  • Bootstrap 4: Sistemas de cartões completos, navegação, utilitários flexíveis e pontos de interrupção responsivos
  • Tailwind CSS: Todas as classes utilitárias são renderizadas com precisão.
  • Base: Sistema de grade completo e suporte a componentes
  • CSS3 moderno: Flexbox, CSS Grid, propriedades personalizadas, animações, transições, transformações e filtros

Validação no mundo real: o IronPDF renderiza com sucesso a página inicial do Bootstrap e todos os exemplos oficiais com fidelidade perfeita em cada pixel.

Exemplo de código: Demonstração de comparação de recursos

using IronPdf;

// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";

var renderer = new ChromePdfRenderer();
string bootstrapShowcase = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .feature-icon {
            width: 64px;
            height: 64px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 2rem;
            border-radius: 12px;
        }
        .comparison-badge { font-size: 0.875rem; font-weight: 600; }
    </style>
</head>
<body>
    <div class='container my-5'>
        <div class='text-center mb-5'>
            <h1 class='display-4 fw-bold mb-3'>HTML to PDF Conversion Features</h1>
            <p class='lead text-muted'>Comprehensive feature comparison across rendering engines</p>
        </div>

        <div class='row g-4 mb-5'>
            <div class='col-md-4'>
                <div class='card h-100 border-primary border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-primary text-white mx-auto mb-3'>🚀</div>
                        <h4 class='card-title'>Chromium Engine</h4>
                        <p class='text-muted mb-3'>Modern browser-grade rendering</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-success'>✓ Full CSS3 Support</span>
                            <span class='comparison-badge badge bg-success'>✓ JavaScript Execution</span>
                            <span class='comparison-badge badge bg-success'>✓ Bootstrap 5 Ready</span>
                            <span class='comparison-badge badge bg-success'>✓ Modern Standards</span>
                        </div>
                    </div>
                    <div class='card-footer bg-primary text-white text-center'>
                        <strong>IronPDF, Puppeteer Sharp</strong>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='card h-100 border-warning border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-warning text-dark mx-auto mb-3'>⚙️</div>
                        <h4 class='card-title'>Custom Engines</h4>
                        <p class='text-muted mb-3'>Proprietary rendering implementations</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-warning text-dark'>~ 90% CSS3</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Limited JavaScript</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Partial Flexbox</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Testing Required</span>
                        </div>
                    </div>
                    <div class='card-footer bg-warning text-dark text-center'>
                        <strong>EvoPDF, Aspose, Spire, iText7</strong>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='card h-100 border-danger border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-danger text-white mx-auto mb-3'>⏳</div>
                        <h4 class='card-title'>WebKit Legacy</h4>
                        <p class='text-muted mb-3'>Outdated rendering technology</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-danger'>✗ No Flexbox</span>
                            <span class='comparison-badge badge bg-danger'>✗ Limited CSS3</span>
                            <span class='comparison-badge badge bg-danger'>✗ Bootstrap 3 Max</span>
                            <span class='comparison-badge badge bg-danger'>✗ Security Issues</span>
                        </div>
                    </div>
                    <div class='card-footer bg-danger text-white text-center'>
                        <strong>WkHtmlToPdf, NReco, DinkToPdf</strong>
                    </div>
                </div>
            </div>
        </div>

        <div class='card shadow-sm mb-4'>
            <div class='card-header bg-white'>
                <h4 class='mb-0'>Detailed Feature Matrix</h4>
            </div>
            <div class='card-body p-0'>
                <div class='table-responsive'>
                    <table class='table table-striped mb-0'>
                        <thead class='table-dark'>
                            <tr>
                                <th style='width: 30%'>Feature</th>
                                <th class='text-center'>Chromium</th>
                                <th class='text-center'>Custom</th>
                                <th class='text-center'>WebKit</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td><strong>HTML5 Elements</strong></td>
                                <td class='text-center'><span class='badge bg-success'>100%</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>85-95%</span></td>
                                <td class='text-center'><span class='badge bg-danger'>60-70%</span></td>
                            </tr>
                            <tr>
                                <td><strong>CSS3 Flexbox</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Partial</span></td>
                                <td class='text-center'><span class='badge bg-danger'>None</span></td>
                            </tr>
                            <tr>
                                <td><strong>CSS Grid Layout</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Limited</span></td>
                                <td class='text-center'><span class='badge bg-danger'>None</span></td>
                            </tr>
                            <tr>
                                <td><strong>JavaScript Execution</strong></td>
                                <td class='text-center'><span class='badge bg-success'>V8 Engine</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Basic</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Minimal</span></td>
                            </tr>
                            <tr>
                                <td><strong>Bootstrap 5 Support</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Perfect</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Needs Testing</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Not Supported</span></td>
                            </tr>
                            <tr>
                                <td><strong>Custom Fonts (Web Fonts)</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Variable</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Limited</span></td>
                            </tr>
                            <tr>
                                <td><strong>Modern Animations</strong></td>
                                <td class='text-center'><span class='badge bg-success'>CSS3 + JS</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>CSS3 Only</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Basic CSS</span></td>
                            </tr>
                            <tr>
                                <td><strong>Security Updates</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Active</span></td>
                                <td class='text-center'><span class='badge bg-success'>Active</span></td>
                                <td class='text-center'><span class='badge bg-danger'>2016 (EOL)</span></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-6'>
                <div class='card shadow-sm h-100'>
                    <div class='card-header bg-success text-white'>
                        <h5 class='mb-0'>✓ Chromium Advantages</h5>
                    </div>
                    <div class='card-body'>
                        <ul class='list-unstyled mb-0'>
                            <li class='mb-2'><strong>Browser-Accurate:</strong> Renders exactly as Chrome/Edge displays web content</li>
                            <li class='mb-2'><strong>Modern Standards:</strong> Full HTML5, CSS3, and ES6+ JavaScript support</li>
                            <li class='mb-2'><strong>Framework Ready:</strong> Bootstrap, Tailwind, Foundation work perfectly</li>
                            <li class='mb-2'><strong>Active Updates:</strong> Regular security patches and feature improvements</li>
                            <li class='mb-0'><strong>Developer Experience:</strong> Design in browser, convert to PDF with confidence</li>
                        </ul>
                    </div>
                </div>
            </div>

            <div class='col-md-6'>
                <div class='card shadow-sm h-100'>
                    <div class='card-header bg-danger text-white'>
                        <h5 class='mb-0'>✗ Legacy Engine Issues</h5>
                    </div>
                    <div class='card-body'>
                        <ul class='list-unstyled mb-0'>
                            <li class='mb-2'><strong>Rendering Gaps:</strong> Modern CSS features don't work or require workarounds</li>
                            <li class='mb-2'><strong>Maintenance Burden:</strong> Parallel CSS for web vs PDF increases complexity</li>
                            <li class='mb-2'><strong>Limited Frameworks:</strong> Bootstrap 4/5 and modern frameworks not supported</li>
                            <li class='mb-2'><strong>Security Risks:</strong> WebKit-based engines haven't received updates since 2016</li>
                            <li class='mb-0'><strong>Development Friction:</strong> Extensive testing required for each layout</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>

        <div class='alert alert-info mt-4 d-flex align-items-start'>
            <div class='me-3 fs-3'>💡</div>
            <div>
                <h5 class='alert-heading'>Recommendation</h5>
                <p class='mb-0'>Choose Chromium-based engines (IronPDF) for production applications requiring modern web standards. Legacy engines force compromises in design and increase maintenance costs, while custom engines require extensive testing for framework compatibility.</p>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapShowcase);
pdf.SaveAs("feature-showcase.pdf");
using IronPdf;

// Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here";

var renderer = new ChromePdfRenderer();
string bootstrapShowcase = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .feature-icon {
            width: 64px;
            height: 64px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 2rem;
            border-radius: 12px;
        }
        .comparison-badge { font-size: 0.875rem; font-weight: 600; }
    </style>
</head>
<body>
    <div class='container my-5'>
        <div class='text-center mb-5'>
            <h1 class='display-4 fw-bold mb-3'>HTML to PDF Conversion Features</h1>
            <p class='lead text-muted'>Comprehensive feature comparison across rendering engines</p>
        </div>

        <div class='row g-4 mb-5'>
            <div class='col-md-4'>
                <div class='card h-100 border-primary border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-primary text-white mx-auto mb-3'>🚀</div>
                        <h4 class='card-title'>Chromium Engine</h4>
                        <p class='text-muted mb-3'>Modern browser-grade rendering</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-success'>✓ Full CSS3 Support</span>
                            <span class='comparison-badge badge bg-success'>✓ JavaScript Execution</span>
                            <span class='comparison-badge badge bg-success'>✓ Bootstrap 5 Ready</span>
                            <span class='comparison-badge badge bg-success'>✓ Modern Standards</span>
                        </div>
                    </div>
                    <div class='card-footer bg-primary text-white text-center'>
                        <strong>IronPDF, Puppeteer Sharp</strong>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='card h-100 border-warning border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-warning text-dark mx-auto mb-3'>⚙️</div>
                        <h4 class='card-title'>Custom Engines</h4>
                        <p class='text-muted mb-3'>Proprietary rendering implementations</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-warning text-dark'>~ 90% CSS3</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Limited JavaScript</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Partial Flexbox</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Testing Required</span>
                        </div>
                    </div>
                    <div class='card-footer bg-warning text-dark text-center'>
                        <strong>EvoPDF, Aspose, Spire, iText7</strong>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='card h-100 border-danger border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-danger text-white mx-auto mb-3'>⏳</div>
                        <h4 class='card-title'>WebKit Legacy</h4>
                        <p class='text-muted mb-3'>Outdated rendering technology</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-danger'>✗ No Flexbox</span>
                            <span class='comparison-badge badge bg-danger'>✗ Limited CSS3</span>
                            <span class='comparison-badge badge bg-danger'>✗ Bootstrap 3 Max</span>
                            <span class='comparison-badge badge bg-danger'>✗ Security Issues</span>
                        </div>
                    </div>
                    <div class='card-footer bg-danger text-white text-center'>
                        <strong>WkHtmlToPdf, NReco, DinkToPdf</strong>
                    </div>
                </div>
            </div>
        </div>

        <div class='card shadow-sm mb-4'>
            <div class='card-header bg-white'>
                <h4 class='mb-0'>Detailed Feature Matrix</h4>
            </div>
            <div class='card-body p-0'>
                <div class='table-responsive'>
                    <table class='table table-striped mb-0'>
                        <thead class='table-dark'>
                            <tr>
                                <th style='width: 30%'>Feature</th>
                                <th class='text-center'>Chromium</th>
                                <th class='text-center'>Custom</th>
                                <th class='text-center'>WebKit</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td><strong>HTML5 Elements</strong></td>
                                <td class='text-center'><span class='badge bg-success'>100%</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>85-95%</span></td>
                                <td class='text-center'><span class='badge bg-danger'>60-70%</span></td>
                            </tr>
                            <tr>
                                <td><strong>CSS3 Flexbox</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Partial</span></td>
                                <td class='text-center'><span class='badge bg-danger'>None</span></td>
                            </tr>
                            <tr>
                                <td><strong>CSS Grid Layout</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Limited</span></td>
                                <td class='text-center'><span class='badge bg-danger'>None</span></td>
                            </tr>
                            <tr>
                                <td><strong>JavaScript Execution</strong></td>
                                <td class='text-center'><span class='badge bg-success'>V8 Engine</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Basic</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Minimal</span></td>
                            </tr>
                            <tr>
                                <td><strong>Bootstrap 5 Support</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Perfect</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Needs Testing</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Not Supported</span></td>
                            </tr>
                            <tr>
                                <td><strong>Custom Fonts (Web Fonts)</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Variable</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Limited</span></td>
                            </tr>
                            <tr>
                                <td><strong>Modern Animations</strong></td>
                                <td class='text-center'><span class='badge bg-success'>CSS3 + JS</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>CSS3 Only</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Basic CSS</span></td>
                            </tr>
                            <tr>
                                <td><strong>Security Updates</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Active</span></td>
                                <td class='text-center'><span class='badge bg-success'>Active</span></td>
                                <td class='text-center'><span class='badge bg-danger'>2016 (EOL)</span></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-6'>
                <div class='card shadow-sm h-100'>
                    <div class='card-header bg-success text-white'>
                        <h5 class='mb-0'>✓ Chromium Advantages</h5>
                    </div>
                    <div class='card-body'>
                        <ul class='list-unstyled mb-0'>
                            <li class='mb-2'><strong>Browser-Accurate:</strong> Renders exactly as Chrome/Edge displays web content</li>
                            <li class='mb-2'><strong>Modern Standards:</strong> Full HTML5, CSS3, and ES6+ JavaScript support</li>
                            <li class='mb-2'><strong>Framework Ready:</strong> Bootstrap, Tailwind, Foundation work perfectly</li>
                            <li class='mb-2'><strong>Active Updates:</strong> Regular security patches and feature improvements</li>
                            <li class='mb-0'><strong>Developer Experience:</strong> Design in browser, convert to PDF with confidence</li>
                        </ul>
                    </div>
                </div>
            </div>

            <div class='col-md-6'>
                <div class='card shadow-sm h-100'>
                    <div class='card-header bg-danger text-white'>
                        <h5 class='mb-0'>✗ Legacy Engine Issues</h5>
                    </div>
                    <div class='card-body'>
                        <ul class='list-unstyled mb-0'>
                            <li class='mb-2'><strong>Rendering Gaps:</strong> Modern CSS features don't work or require workarounds</li>
                            <li class='mb-2'><strong>Maintenance Burden:</strong> Parallel CSS for web vs PDF increases complexity</li>
                            <li class='mb-2'><strong>Limited Frameworks:</strong> Bootstrap 4/5 and modern frameworks not supported</li>
                            <li class='mb-2'><strong>Security Risks:</strong> WebKit-based engines haven't received updates since 2016</li>
                            <li class='mb-0'><strong>Development Friction:</strong> Extensive testing required for each layout</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>

        <div class='alert alert-info mt-4 d-flex align-items-start'>
            <div class='me-3 fs-3'>💡</div>
            <div>
                <h5 class='alert-heading'>Recommendation</h5>
                <p class='mb-0'>Choose Chromium-based engines (IronPDF) for production applications requiring modern web standards. Legacy engines force compromises in design and increase maintenance costs, while custom engines require extensive testing for framework compatibility.</p>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapShowcase);
pdf.SaveAs("feature-showcase.pdf");
Imports IronPdf

' Set your IronPDF license key
IronPdf.License.LicenseKey = "License-Key goes here"

Dim renderer As New ChromePdfRenderer()
Dim bootstrapShowcase As String = "
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .feature-icon {
            width: 64px;
            height: 64px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 2rem;
            border-radius: 12px;
        }
        .comparison-badge { font-size: 0.875rem; font-weight: 600; }
    </style>
</head>
<body>
    <div class='container my-5'>
        <div class='text-center mb-5'>
            <h1 class='display-4 fw-bold mb-3'>HTML to PDF Conversion Features</h1>
            <p class='lead text-muted'>Comprehensive feature comparison across rendering engines</p>
        </div>

        <div class='row g-4 mb-5'>
            <div class='col-md-4'>
                <div class='card h-100 border-primary border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-primary text-white mx-auto mb-3'>🚀</div>
                        <h4 class='card-title'>Chromium Engine</h4>
                        <p class='text-muted mb-3'>Modern browser-grade rendering</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-success'>✓ Full CSS3 Support</span>
                            <span class='comparison-badge badge bg-success'>✓ JavaScript Execution</span>
                            <span class='comparison-badge badge bg-success'>✓ Bootstrap 5 Ready</span>
                            <span class='comparison-badge badge bg-success'>✓ Modern Standards</span>
                        </div>
                    </div>
                    <div class='card-footer bg-primary text-white text-center'>
                        <strong>IronPDF, Puppeteer Sharp</strong>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='card h-100 border-warning border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-warning text-dark mx-auto mb-3'>⚙️</div>
                        <h4 class='card-title'>Custom Engines</h4>
                        <p class='text-muted mb-3'>Proprietary rendering implementations</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-warning text-dark'>~ 90% CSS3</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Limited JavaScript</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Partial Flexbox</span>
                            <span class='comparison-badge badge bg-warning text-dark'>⚠ Testing Required</span>
                        </div>
                    </div>
                    <div class='card-footer bg-warning text-dark text-center'>
                        <strong>EvoPDF, Aspose, Spire, iText7</strong>
                    </div>
                </div>
            </div>

            <div class='col-md-4'>
                <div class='card h-100 border-danger border-2 shadow-sm'>
                    <div class='card-body text-center'>
                        <div class='feature-icon bg-danger text-white mx-auto mb-3'>⏳</div>
                        <h4 class='card-title'>WebKit Legacy</h4>
                        <p class='text-muted mb-3'>Outdated rendering technology</p>
                        <div class='d-flex flex-column gap-2'>
                            <span class='comparison-badge badge bg-danger'>✗ No Flexbox</span>
                            <span class='comparison-badge badge bg-danger'>✗ Limited CSS3</span>
                            <span class='comparison-badge badge bg-danger'>✗ Bootstrap 3 Max</span>
                            <span class='comparison-badge badge bg-danger'>✗ Security Issues</span>
                        </div>
                    </div>
                    <div class='card-footer bg-danger text-white text-center'>
                        <strong>WkHtmlToPdf, NReco, DinkToPdf</strong>
                    </div>
                </div>
            </div>
        </div>

        <div class='card shadow-sm mb-4'>
            <div class='card-header bg-white'>
                <h4 class='mb-0'>Detailed Feature Matrix</h4>
            </div>
            <div class='card-body p-0'>
                <div class='table-responsive'>
                    <table class='table table-striped mb-0'>
                        <thead class='table-dark'>
                            <tr>
                                <th style='width: 30%'>Feature</th>
                                <th class='text-center'>Chromium</th>
                                <th class='text-center'>Custom</th>
                                <th class='text-center'>WebKit</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td><strong>HTML5 Elements</strong></td>
                                <td class='text-center'><span class='badge bg-success'>100%</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>85-95%</span></td>
                                <td class='text-center'><span class='badge bg-danger'>60-70%</span></td>
                            </tr>
                            <tr>
                                <td><strong>CSS3 Flexbox</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Partial</span></td>
                                <td class='text-center'><span class='badge bg-danger'>None</span></td>
                            </tr>
                            <tr>
                                <td><strong>CSS Grid Layout</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Limited</span></td>
                                <td class='text-center'><span class='badge bg-danger'>None</span></td>
                            </tr>
                            <tr>
                                <td><strong>JavaScript Execution</strong></td>
                                <td class='text-center'><span class='badge bg-success'>V8 Engine</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Basic</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Minimal</span></td>
                            </tr>
                            <tr>
                                <td><strong>Bootstrap 5 Support</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Perfect</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Needs Testing</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Not Supported</span></td>
                            </tr>
                            <tr>
                                <td><strong>Custom Fonts (Web Fonts)</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Full</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Variable</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>Limited</span></td>
                            </tr>
                            <tr>
                                <td><strong>Modern Animations</strong></td>
                                <td class='text-center'><span class='badge bg-success'>CSS3 + JS</span></td>
                                <td class='text-center'><span class='badge bg-warning text-dark'>CSS3 Only</span></td>
                                <td class='text-center'><span class='badge bg-danger'>Basic CSS</span></td>
                            </tr>
                            <tr>
                                <td><strong>Security Updates</strong></td>
                                <td class='text-center'><span class='badge bg-success'>Active</span></td>
                                <td class='text-center'><span class='badge bg-success'>Active</span></td>
                                <td class='text-center'><span class='badge bg-danger'>2016 (EOL)</span></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-6'>
                <div class='card shadow-sm h-100'>
                    <div class='card-header bg-success text-white'>
                        <h5 class='mb-0'>✓ Chromium Advantages</h5>
                    </div>
                    <div class='card-body'>
                        <ul class='list-unstyled mb-0'>
                            <li class='mb-2'><strong>Browser-Accurate:</strong> Renders exactly as Chrome/Edge displays web content</li>
                            <li class='mb-2'><strong>Modern Standards:</strong> Full HTML5, CSS3, and ES6+ JavaScript support</li>
                            <li class='mb-2'><strong>Framework Ready:</strong> Bootstrap, Tailwind, Foundation work perfectly</li>
                            <li class='mb-2'><strong>Active Updates:</strong> Regular security patches and feature improvements</li>
                            <li class='mb-0'><strong>Developer Experience:</strong> Design in browser, convert to PDF with confidence</li>
                        </ul>
                    </div>
                </div>
            </div>

            <div class='col-md-6'>
                <div class='card shadow-sm h-100'>
                    <div class='card-header bg-danger text-white'>
                        <h5 class='mb-0'>✗ Legacy Engine Issues</h5>
                    </div>
                    <div class='card-body'>
                        <ul class='list-unstyled mb-0'>
                            <li class='mb-2'><strong>Rendering Gaps:</strong> Modern CSS features don't work or require workarounds</li>
                            <li class='mb-2'><strong>Maintenance Burden:</strong> Parallel CSS for web vs PDF increases complexity</li>
                            <li class='mb-2'><strong>Limited Frameworks:</strong> Bootstrap 4/5 and modern frameworks not supported</li>
                            <li class='mb-2'><strong>Security Risks:</strong> WebKit-based engines haven't received updates since 2016</li>
                            <li class='mb-0'><strong>Development Friction:</strong> Extensive testing required for each layout</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>

        <div class='alert alert-info mt-4 d-flex align-items-start'>
            <div class='me-3 fs-3'>💡</div>
            <div>
                <h5 class='alert-heading'>Recommendation</h5>
                <p class='mb-0'>Choose Chromium-based engines (IronPDF) for production applications requiring modern web standards. Legacy engines force compromises in design and increase maintenance costs, while custom engines require extensive testing for framework compatibility.</p>
            </div>
        </div>
    </div>
</body>
</html>"

Dim pdf = renderer.RenderHtmlAsPdf(bootstrapShowcase)
pdf.SaveAs("feature-showcase.pdf")
$vbLabelText   $csharpLabel

Resultado: PDF de comparação abrangente de recursos com os componentes de cartão do Bootstrap 5, sistema de grade responsivo, utilitários de distintivo, utilitários de cores, componentes de tabela com listras e componentes de alerta — tudo renderizado com precisão de cores, fidelidade de layout e tipografia perfeitas.

A maioria das bibliotecas C# de HTML para PDF oferece suporte limitado ou inexistente ao Bootstrap.

A maioria das bibliotecas C# de HTML para PDF se enquadra em categorias com limitações significativas do Bootstrap:

Bibliotecas baseadas em WebKit (WkHtmlToPdf, NReco, DinkToPdf, HiQPdf):

  • Sem suporte a flexbox (o Bootstrap 4/5 depende muito do flexbox)
  • Sem CSS Grid
  • Bootstrap 3 no máximo (somente layouts baseados em tabelas)
  • Última atualização em 2016 — vulnerabilidades de segurança e ausência de recursos CSS modernos

Bibliotecas de mecanismo personalizadas (EvoPdf, Aspose, Spire, SelectPdf, iText7):

  • Aproximadamente 90% de suporte a CSS3, com lacunas em áreas críticas.
  • Implementação parcial de flexbox
  • CSS Grid limitado
  • Requer testes extensivos para cada componente do Bootstrap.

Sem suporte a HTML (PDFSharpCore, XFINIUM.PDF, GemBox sem complementos):

  • Sem mecanismo de renderização HTML nativo
  • Requer construção manual de PDF
  • Bootstrap não aplicável

Impacto no desenvolvimento: Equipes que utilizam mecanismos de busca diferentes do Chromium precisam criar layouts simplificados e "compatíveis com PDF" ou manter arquivos CSS paralelos, o que aumenta significativamente o tempo de desenvolvimento e reduz a consistência do design entre aplicativos web e arquivos PDF gerados automaticamente.

Para obter orientações completas sobre o framework Bootstrap e detalhes de renderização CSS3, consulte o Guia de CSS do Bootstrap e Flexbox .

Os projetos experimentais e abandonados

Algumas bibliotecas de HTML para PDF em C# começaram promissoras, mas rapidamente se tornaram becos sem saída técnicos ou exigiram infraestrutura excessivamente complexa. Podem parecer "modernas", mas, na prática, introduzem complexidades ocultas para os desenvolvedores que tentam gerar documentos PDF a partir de conteúdo HTML ou páginas web completas.

Gotenberg – O Pesadelo dos Microsserviços

O Gotenberg se promove como fácil de usar com o slogan: "Basta executar um contêiner Docker!" Mas, na realidade, usá-lo em produção geralmente exige muito mais: Docker, Kubernetes, descoberta de serviços, balanceamento de carga e políticas de rede.

O que começou como uma simples tarefa de conversão de HTML para PDF em C# pode rapidamente se transformar em um problema de sistemas distribuídos. Você precisa garantir que o Gotenberg esteja em execução, que a rede esteja funcionando corretamente e que os contêineres Docker permaneçam estáveis. A complexidade operacional adicional torna essa conversão para PDF uma tarefa que deveria ser simples e dependente de recursos.

Controle WebView2 – A armadilha exclusiva do Windows

O controle WebView2 da Microsoft parece atraente à primeira vista, mas apresenta limitações significativas: funciona apenas no Windows, requer o Edge WebView2 Runtime, não funciona em servidores sem um ambiente de desktop e pode apresentar problemas de segurança em ambientes isolados (sandbox).

Bibliotecas como Westwind.WebView.HtmlToPdf, que encapsulam o WebView2, herdam as mesmas limitações, além de dependências adicionais.

Chrome Headless – O Processo.Start Horror

Alguns desenvolvedores chegam a tentar gerar PDFs em produção executando o Chrome em modo headless usando Process.Start("chrome", "--headless --print-to-pdf").

Essa abordagem acarreta diversos problemas sérios:

  • Vulnerabilidades de injeção de comandos
  • As atualizações automáticas do Chrome podem causar problemas inesperados.
  • Sem tratamento de erros integrado
  • Arquivos temporários espalhados pelo sistema
  • Requer que o Chrome esteja instalado no servidor.

De modo geral, depender diretamente do Process.Start para a geração de PDFs sem interface gráfica no Chrome é considerado arriscado e frágil para ambientes de produção.

Selenium WebDriver – Ferramenta de Teste, Não um Gerador de PDF

O Selenium foi projetado para testes, não para gerar PDFs. Usá-lo para gerar PDFs é como usar um trator para quebrar um ovo.

Embora seja possível navegar de uma instância do navegador para conteúdo HTML usando algo como ChromeDriver e driver.Navigate().GoToUrl("data:text/html," + html), o Selenium não pode gerar PDFs diretamente. Para gerar algo semelhante a um PDF, é necessário usar o protocolo Chrome DevTools, o que aumenta a complexidade e frequentemente leva a vazamentos de memória.

O pacote Selenium.WebDriver.ChromeDriver simplesmente fornece o driver do Chrome para o Selenium — não é uma solução para geração de PDFs.

Esses projetos experimentais demonstram por que tentar converter HTML para PDF usando ferramentas abandonadas ou experimentais geralmente dá mais trabalho do que compensa:

  • Gotenberg: Requer Docker e orquestração para algo que deveria ser uma simples tarefa de conversão de PDF. Gerenciar páginas web inteiras e arquivos HTML torna-se um problema de sistemas distribuídos.
  • WebView2: Exclusivo para Windows, dependente de ambientes de desktop e não adequado para geração de PDFs no servidor.
  • Chrome Headless via Process.Start: Introduz riscos de segurança, arquivos temporários e dependências de plataforma.
  • Selenium WebDriver: Projetado para automação de navegadores, não para criação de documentos PDF. Os desenvolvedores frequentemente perdem tempo tentando tratar uma ferramenta de teste como um conversor de PDF.

Tentar renderizar elementos HTML, manipular documentos PDF ou gerar arquivos PDF com essas bibliotecas geralmente resulta em falhas de implantação, layouts corrompidos ou PDFs que não podem ser pesquisados. O IronPDF foi projetado para eliminar esses problemas, oferecendo métodos robustos para converter HTML em PDF, lidar com conteúdo dinâmico e fornecer suporte completo a CSS em todas as plataformas.

As bibliotecas PDF em C# "emergentes" (Spoiler: Elas ainda não estão prontas)

Mesmo em 2025, novas bibliotecas de PDF em C# continuam surgindo. A maioria promete o mundo, mas a realidade é bem diferente. Essas soluções "emergentes" muitas vezes parecem interessantes no GitHub , mas não estão prontas para produção.

PeachPDF – Vaporware

O PeachPDF é descrito como "em desenvolvimento para uso da comunidade", mas, na realidade, ele ainda não existe. Ao verificar o repositório do GitHub, são exibidas apenas três commits, sendo o último realizado há oito meses. O ecossistema de bibliotecas de PDF já possui muitas opções consolidadas, e não há muita necessidade de mais projetos inacabados como este.

Dramaturgo – Automação de Navegador da Microsoft

O Playwright é essencialmente a versão da Microsoft do Puppeteer. Compartilha muitos dos mesmos desafios. Por exemplo, requer binários de navegador, o que adiciona uma sobrecarga significativa. A implementação pode ser complexa e, na verdade, não se trata de uma biblioteca de PDF — a conversão de HTML para PDF não é seu foco principal.

O uso do Playwright normalmente envolve o gerenciamento de 300 MB ou mais de binários adicionais do navegador Chromium, o que aumenta ainda mais a complexidade de qualquer projeto.

Biblioteca de PDFs da Syncfusion – O Imposto sobre Pacotes

Se você deseja a funcionalidade de conversão de HTML para PDF com o Syncfusion, na prática, você precisa adquirir o pacote completo de produtos deles. O custo mínimo é de US$ 995 por desenvolvedor. No Linux, isso também adiciona 147 MB ​​de arquivos extras apenas para obter um único recurso. Em outras palavras, se você quisesse apenas uma funcionalidade, acabaria comprando acesso a 70.

Aspose.PDF – Preços corporativos para todos

O Aspose.PDF tem preços a partir de US$ 1.199, podendo chegar a US$ 11.997. Para pequenas equipes ou desenvolvedores individuais, esse valor pode ser proibitivo. A documentação é extensa, mas pressupõe um alto nível de conhecimento técnico, o que dificulta o início rápido para iniciantes.

Até mesmo tarefas simples podem exigir a navegação em uma API complexa. Por exemplo, criar um novo documento e adicionar uma página envolve várias etapas, o que pode parecer desnecessariamente complicado em comparação com bibliotecas mais simples.

Essas soluções emergentes são frequentemente comercializadas como "conversores de HTML para PDF em C#" fáceis de usar, mas, na realidade, exigem configuração complexa, trabalho manual ou a compra de pacotes de software caros. Eles prometem compatibilidade entre plataformas, geração robusta de PDFs ou suporte completo a CSS, mas os testes em aplicações .NET do mundo real mostram lacunas:

  • Os binários do navegador devem ser baixados e gerenciados manualmente.
  • A geração de PDF falha para conteúdo dinâmico ou elementos HTML modernos.
  • A renderização de CSS e JavaScript geralmente é incompleta.
  • A documentação é mínima ou desatualizada.

Os desenvolvedores que tentam adotar essas bibliotecas muitas vezes passam dias solucionando problemas, apenas para acabar voltando a soluções já consolidadas como o IronPDF, que oferece chamadas de método robustas e lida com a renderização de páginas web inteiras de forma confiável.

Procurando alternativas melhores? Confira nossa comparação com o Aspose.PDF ou veja por que os desenvolvedores estão migrando para o IronPDF .

Por que criamos o IronPDF de forma diferente

Após vivenciarmos todos os tipos de falhas possíveis na conversão de HTML para PDF em C#, desenvolvemos o IronPDF com base em princípios que realmente importam para os desenvolvedores em 2025. Nosso objetivo era simples: conversão confiável de conteúdo HTML para PDF, sem se preocupar com peculiaridades da plataforma, armadilhas de licenciamento ou recursos não suportados.

1. Simplesmente funciona™

O IronPDF oferece uma maneira simples e confiável de gerar PDFs. Não há binários externos para copiar, nenhuma instalação do Chrome é necessária, nenhum código específico da plataforma com que se preocupar e nenhuma "oração" extra é necessária para que funcione.

Usando o IronPDF, você simplesmente cria um ChromePdfRenderer, passa seu HTML e obtém um PDF como resultado. Pronto — funciona exatamente como esperado, sem nenhuma configuração complexa ou dependências.

using IronPdf;

public class WhatPdfGenerationShouldBe
{
    public async Task<byte[]> GeneratePdf(string html)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}
using IronPdf;

public class WhatPdfGenerationShouldBe
{
    public async Task<byte[]> GeneratePdf(string html)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}
Imports IronPdf

Public Class WhatPdfGenerationShouldBe
    Public Async Function GeneratePdf(html As String) As Task(Of Byte())
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
        Return pdf.BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

Com o IronPDF, a conversão de HTML para PDF acontece em apenas algumas linhas. Você pode gerar arquivos PDF a partir de arquivos HTML, strings HTML ou páginas da web renderizadas dinamicamente sem se preocupar com URLs relativas, permissões de arquivo ou falta de suporte a CSS. Quer você esteja renderizando páginas da web inteiras, trechos de HTML ou código HTML com imagens, tudo funciona de forma confiável.

Precisa de mais exemplos? Confira nosso tutorial de conversão de HTML para PDF ou veja exemplos de código reais .

IronPDF é a única biblioteca que oferece suporte completo a:

  • Seção 508 (Normas de Acessibilidade dos EUA)
  • PDF/A (ISO 19005 para arquivamento)
  • PDF/UA (ISO 14289 para acessibilidade)

Como membro da PDF Association , não apenas cumprimos os padrões, como os superamos. É por isso que as agências governamentais confiam em nós:

public class ComplianceThatMatters
{
    public async Task<byte[]> GenerateCompliantPdf(string html)
    {
        var renderer = new ChromePdfRenderer();

        // Full Section 508 compliance
        renderer.RenderingOptions.CreatePdfA = true;

        // Better accessibility than Chrome itself
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        // Add proper tags for screen readers
        pdf.AddAccessibilityTags();

        // This is why NASA, Tesla, and the US Government use IronPDF
        return pdf.BinaryData;
    }
}
public class ComplianceThatMatters
{
    public async Task<byte[]> GenerateCompliantPdf(string html)
    {
        var renderer = new ChromePdfRenderer();

        // Full Section 508 compliance
        renderer.RenderingOptions.CreatePdfA = true;

        // Better accessibility than Chrome itself
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        // Add proper tags for screen readers
        pdf.AddAccessibilityTags();

        // This is why NASA, Tesla, and the US Government use IronPDF
        return pdf.BinaryData;
    }
}
Imports System.Threading.Tasks

Public Class ComplianceThatMatters
    Public Async Function GenerateCompliantPdf(html As String) As Task(Of Byte())
        Dim renderer = New ChromePdfRenderer()

        ' Full Section 508 compliance
        renderer.RenderingOptions.CreatePdfA = True

        ' Better accessibility than Chrome itself
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)

        ' Add proper tags for screen readers
        pdf.AddAccessibilityTags()

        ' This is why NASA, Tesla, and the US Government use IronPDF
        Return pdf.BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

Isso significa que os documentos PDF criados a partir de páginas HTML atendem a padrões rigorosos para campos de formulário, permissões de arquivo e acessibilidade — algo em que as bibliotecas de conversão de PDF e as ferramentas de renderização de HTML geralmente não conseguem.

Está com dificuldades com outras bibliotecas? Veja comparações diretas:

Isso não é conversa fiada de marketing. O Puppeteer e o Playwright literalmente não conseguem gerar documentos compatíveis com PDF/A ou PDF/UA. Eles usam a função de impressão para PDF do Chrome, que não possui esses recursos. Quando a Casa Branca precisa de PDFs acessíveis, ela não usa bibliotecas gratuitas – ela usa o IronPDF.

3. Projetado para o desenvolvimento moderno

Nossa API de alto nível permite que desenvolvedores gerem documentos PDF a partir de conteúdo dinâmico com apenas algumas linhas de código:

public class AiGeneratedExample
{
    public async Task<byte[]> GenerateInvoiceWithAI(Invoice invoice)
    {
        var renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                MarginTop = 25,
                MarginBottom = 25,
                PaperOrientation = PdfPaperOrientation.Portrait,
                EnableJavaScript = true,
                CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
            }
        };

        var html = GenerateInvoiceHtml(invoice);
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        // Add metadata
        pdf.MetaData.Author = "AI-Generated";
        pdf.MetaData.Title = $"Invoice #{invoice.Number}";

        return pdf.BinaryData;
    }
}
public class AiGeneratedExample
{
    public async Task<byte[]> GenerateInvoiceWithAI(Invoice invoice)
    {
        var renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                MarginTop = 25,
                MarginBottom = 25,
                PaperOrientation = PdfPaperOrientation.Portrait,
                EnableJavaScript = true,
                CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
            }
        };

        var html = GenerateInvoiceHtml(invoice);
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        // Add metadata
        pdf.MetaData.Author = "AI-Generated";
        pdf.MetaData.Title = $"Invoice #{invoice.Number}";

        return pdf.BinaryData;
    }
}
Imports System.Threading.Tasks
Imports IronPdf

Public Class AiGeneratedExample
    Public Async Function GenerateInvoiceWithAI(invoice As Invoice) As Task(Of Byte())
        Dim renderer = New ChromePdfRenderer With {
            .RenderingOptions = New PdfRenderingOptions With {
                .MarginTop = 25,
                .MarginBottom = 25,
                .PaperOrientation = PdfPaperOrientation.Portrait,
                .EnableJavaScript = True,
                .CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
            }
        }

        Dim html = GenerateInvoiceHtml(invoice)
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)

        ' Add metadata
        pdf.MetaData.Author = "AI-Generated"
        pdf.MetaData.Title = $"Invoice #{invoice.Number}"

        Return pdf.BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

Os desenvolvedores podem converter facilmente HTML em formato PDF, renderizando páginas da web com suporte a CSS, quebras de página internas/externas e opções de CSS para impressão. A API lida com URLs relativas, arquivos de imagem e elementos HTML, oferecendo controle total sobre o tamanho da página PDF, cabeçalhos personalizados e permissões de arquivo.

4. Integração OCR real

O IronPDF permite manipular documentos PDF com recursos de OCR:

public class BeyondHtmlToPdf
{
    public async Task<string> ProcessScannedDocument(byte[] scannedPdf)
    {
        var pdf = PdfDocument.FromBytes(scannedPdf);

        // OCR the content
        var text = pdf.ExtractTextFromPage(0);

        if (string.IsNullOrWhiteSpace(text))
        {
            text = await pdf.ApplyOcr();
        }

        var structuredData = await ExtractWithAI(text);
        var combined = PdfDocument.Merge(pdf, otherPdf);

        combined.SignWithCertificate(certificate);
        return structuredData;
    }

    private async Task<string> ExtractWithAI(string text)
    {
        return await OpenAIService.Extract(text);
    }
}
public class BeyondHtmlToPdf
{
    public async Task<string> ProcessScannedDocument(byte[] scannedPdf)
    {
        var pdf = PdfDocument.FromBytes(scannedPdf);

        // OCR the content
        var text = pdf.ExtractTextFromPage(0);

        if (string.IsNullOrWhiteSpace(text))
        {
            text = await pdf.ApplyOcr();
        }

        var structuredData = await ExtractWithAI(text);
        var combined = PdfDocument.Merge(pdf, otherPdf);

        combined.SignWithCertificate(certificate);
        return structuredData;
    }

    private async Task<string> ExtractWithAI(string text)
    {
        return await OpenAIService.Extract(text);
    }
}
Imports System.Threading.Tasks

Public Class BeyondHtmlToPdf
    Public Async Function ProcessScannedDocument(scannedPdf As Byte()) As Task(Of String)
        Dim pdf = PdfDocument.FromBytes(scannedPdf)

        ' OCR the content
        Dim text = pdf.ExtractTextFromPage(0)

        If String.IsNullOrWhiteSpace(text) Then
            text = Await pdf.ApplyOcr()
        End If

        Dim structuredData = Await ExtractWithAI(text)
        Dim combined = PdfDocument.Merge(pdf, otherPdf)

        combined.SignWithCertificate(certificate)
        Return structuredData
    End Function

    Private Async Function ExtractWithAI(text As String) As Task(Of String)
        Return Await OpenAIService.Extract(text)
    End Function
End Class
$vbLabelText   $csharpLabel

Diferentemente de outras ferramentas de conversão de PDF, o IronPDF permite gerar documentos PDF a partir de arquivos de imagem digitalizados ou conteúdo HTML e extrair dados estruturados automaticamente, simplificando a geração de PDFs em aplicações .NET complexas.

Saiba mais: Mesclar PDFs | Assinaturas digitais | Extrair texto de PDFs

5. Implantação que realmente funciona

 Ambientes de implantação do IronPDF

O IronPDF foi projetado para conversão multiplataforma de HTML para PDF em aplicações .NET modernas. Você pode gerar documentos PDF a partir de conteúdo HTML sem se preocupar com dependências de plataforma, instalações de binários ou configurações de servidor:

  • Servidor Windows
  • Distribuições Linux (Ubuntu, Debian, Alpine)
  • macOS
  • Contêineres Docker
  • Funções do Azure
  • AWS Lambda
  • Kubernetes

Ele também oferece suporte a vários destinos .NET :

  • .NET Framework 4.0 e superior
  • .NET Core 2.0 e superior
  • .NET 5, 6, 7, 8, 9 e 10

Utilizar a biblioteca é simples. Você pode simplesmente criar um renderizador, chamar RenderHtmlAsPdfAsync com seu conteúdo HTML e obter um PDF. Resumindo: funciona em qualquer lugar.

Consulte os guias de implantação: Implantação do Docker | Funções do Azure | AWS Lambda | Instalação do Linux

As vantagens técnicas que incorporamos

1. Renderização verdadeira do Chromium

Renderização do Chromium vs. Geração de PDF no IE/WebKit

O IronPDF utiliza o Chromium moderno internamente — não o WebKit de 2016 ou o Internet Explorer — garantindo suporte completo a CSS3, JavaScript e elementos HTML.

public class ModernWebStandards
{
    public async Task<byte[]> GenerateModernPdf()
    {
        var renderer = new ChromePdfRenderer();

        var html = @"
        <style>
            .container {
                display: grid;
                grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
                gap: 2rem;
            }
            .card {
                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                border-radius: 15px;
                box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            }
            @media print { .no-print { display: none; } }
        </style>
        <div class='container'>
            <div class='card'>Modern CSS works!</div>
        </div>";

        var pdf = await renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}
public class ModernWebStandards
{
    public async Task<byte[]> GenerateModernPdf()
    {
        var renderer = new ChromePdfRenderer();

        var html = @"
        <style>
            .container {
                display: grid;
                grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
                gap: 2rem;
            }
            .card {
                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                border-radius: 15px;
                box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            }
            @media print { .no-print { display: none; } }
        </style>
        <div class='container'>
            <div class='card'>Modern CSS works!</div>
        </div>";

        var pdf = await renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }
}
Imports System.Threading.Tasks

Public Class ModernWebStandards
    Public Async Function GenerateModernPdf() As Task(Of Byte())
        Dim renderer = New ChromePdfRenderer()

        Dim html = "
        <style>
            .container {
                display: grid;
                grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
                gap: 2rem;
            }
            .card {
                background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
                border-radius: 15px;
                box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            }
            @media print { .no-print { display: none; } }
        </style>
        <div class='container'>
            <div class='card'>Modern CSS works!</div>
        </div>"

        Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
        Return pdf.BinaryData
    End Function
End Class
$vbLabelText   $csharpLabel

Este método robusto garante que os arquivos PDF mantenham as regras adequadas de quebra de página interna e externa, que os arquivos de imagem sejam incorporados corretamente e que as strings HTML ou arquivos HTML de qualquer URL especificada sejam convertidos de forma confiável. Os desenvolvedores podem converter facilmente documentos HTML em PDF com apenas algumas linhas de código.

2. Atualizações mensais

O IronPDF envia atualizações mensais, mantendo suas ferramentas de geração de PDF sincronizadas com os padrões da web em constante evolução.

  • Outubro de 2025: Suporte ao .NET 10 desde o primeiro dia
  • Setembro de 2025: APIs de integração de IA aprimoradas
  • Agosto de 2025: renderização de HTML para PDF 30% mais rápida.
  • Julho de 2025: Suporte nativo para Apple Silicon

Compare isso com os concorrentes:

  • DinkToPdf: Última atualização em junho de 2020
  • HtmlRenderer: Última atualização em 2019
  • TuesPechkin: Última atualização em 2015

3. Suporte Real

O IronPDF não te deixa na mão. Ao enviar um e-mail para support@ironsoftware.com , um desenvolvedor de verdade responde. Sem fóruns, sem chatbots — apenas alguém que conheça o processo de conversão de HTML para PDF, a API do conversor de PDF e as permissões de arquivos PDF.

A Revolução da IA

Eis algo que nenhuma outra biblioteca de PDF considerou: integração completa com IA. O IronPDF foi projetado para funcionar perfeitamente com assistentes de codificação de IA, permitindo que os desenvolvedores gerem documentos HTML que podem ser convertidos instantaneamente em arquivos PDF. Isso é particularmente útil para a conversão de páginas da web, trechos de HTML ou conteúdo HTML dinâmico em PDF, preservando o suporte a CSS, URLs relativos e configurações de quebra de página.

public class AIPoweredDocuments
{
    private readonly ChromePdfRenderer _renderer = new();

    public async Task<byte[]> GenerateAIDocument(string prompt)
    {
        // Step 1: AI generates the HTML
        var html = await GenerateHtmlWithAI(prompt);

        // Step 2: IronPDF renders it perfectly as a PDF document
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Step 3: OCR and extract data from existing PDF files
        var existingData = await ExtractDataFromPdfs();

        // Step 4: AI enhances the PDF document
        var enhanced = await EnhanceWithAI(pdf, existingData);

        return enhanced.BinaryData;
    }

    private async Task<string> GenerateHtmlWithAI(string prompt)
    {
        // IronPDF's API is so clean that ChatGPT/Claude
        // can generate working code without training
        var response = await OpenAI.Complete($@"
            Generate HTML for: {prompt}
            Requirements:
            - Use modern CSS3/HTML5
            - Include responsive design
            - Add print-specific CSS for PDF page size
        ");

        return response.Html;
    }
}
public class AIPoweredDocuments
{
    private readonly ChromePdfRenderer _renderer = new();

    public async Task<byte[]> GenerateAIDocument(string prompt)
    {
        // Step 1: AI generates the HTML
        var html = await GenerateHtmlWithAI(prompt);

        // Step 2: IronPDF renders it perfectly as a PDF document
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Step 3: OCR and extract data from existing PDF files
        var existingData = await ExtractDataFromPdfs();

        // Step 4: AI enhances the PDF document
        var enhanced = await EnhanceWithAI(pdf, existingData);

        return enhanced.BinaryData;
    }

    private async Task<string> GenerateHtmlWithAI(string prompt)
    {
        // IronPDF's API is so clean that ChatGPT/Claude
        // can generate working code without training
        var response = await OpenAI.Complete($@"
            Generate HTML for: {prompt}
            Requirements:
            - Use modern CSS3/HTML5
            - Include responsive design
            - Add print-specific CSS for PDF page size
        ");

        return response.Html;
    }
}
Imports System.Threading.Tasks

Public Class AIPoweredDocuments
    Private ReadOnly _renderer As New ChromePdfRenderer()

    Public Async Function GenerateAIDocument(prompt As String) As Task(Of Byte())
        ' Step 1: AI generates the HTML
        Dim html = Await GenerateHtmlWithAI(prompt)

        ' Step 2: IronPDF renders it perfectly as a PDF document
        Dim pdf = Await _renderer.RenderHtmlAsPdfAsync(html)

        ' Step 3: OCR and extract data from existing PDF files
        Dim existingData = Await ExtractDataFromPdfs()

        ' Step 4: AI enhances the PDF document
        Dim enhanced = Await EnhanceWithAI(pdf, existingData)

        Return enhanced.BinaryData
    End Function

    Private Async Function GenerateHtmlWithAI(prompt As String) As Task(Of String)
        ' IronPDF's API is so clean that ChatGPT/Claude
        ' can generate working code without training
        Dim response = Await OpenAI.Complete($"
            Generate HTML for: {prompt}
            Requirements:
            - Use modern CSS3/HTML5
            - Include responsive design
            - Add print-specific CSS for PDF page size
        ")

        Return response.Html
    End Function
End Class
$vbLabelText   $csharpLabel

Essa abordagem permite que os desenvolvedores gerem documentos PDF a partir de conteúdo HTML criado por IA — incluindo campos de formulário, imagens e cabeçalhos personalizados — com apenas algumas linhas de código. O IronPDF realiza a conversão de HTML para PDF, OCR e extração de IA de forma integrada, produzindo arquivos PDF totalmente manipuláveis, acessíveis e profissionais, prontos para qualquer aplicação .NET .

Por que os desenvolvedores escolhem o IronPDF?

Com o IronPDF, começar a usar é extremamente rápido e simples: você instala o pacote, escreve apenas três linhas de código e gera um PDF — tudo em cerca de cinco minutos.

Em contrapartida, outras soluções de conversão de HTML para PDF geralmente envolvem um processo de configuração muito mais longo: é preciso instalar o pacote, baixar os binários necessários, configurar os caminhos dos arquivos, lidar com as diferenças entre plataformas, depurar falhas e resolver outras complicações. Para muitos desenvolvedores, isso pode levar até duas semanas, o que frequentemente os leva a optar pelo IronPDF devido à sua simplicidade e confiabilidade.

Os desenvolvedores apreciam o IronPDF porque ele torna a geração de PDFs rápida, confiável e fácil. A API é simples, portanto, gerar um PDF a partir de um arquivo HTML ou conteúdo HTML requer apenas algumas linhas de código. Os usuários finais se beneficiam de PDFs acessíveis e bem estruturados, com campos de formulário adequados, imagens e renderização consistente de páginas da web completas. O IronPDF elimina a dificuldade de lidar com problemas específicos da plataforma, configurações complexas ou ferramentas de terceiros com defeito.

Experimente você mesmo

Pare de ler sobre isso — experimente como a geração de PDFs pode ser simples com o IronPDF:

// Install-Package IronPdf
using IronPdf;

class Program
{
    static async Task Main()
    {
        // Your first PDF in 3 lines of code
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Hello World</h1>");
        pdf.SaveAs("hello.pdf");

        // No configuration, no extra binaries, no complicated setup
        // It just works across Windows, Linux, macOS, and Docker
    }
}
// Install-Package IronPdf
using IronPdf;

class Program
{
    static async Task Main()
    {
        // Your first PDF in 3 lines of code
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Hello World</h1>");
        pdf.SaveAs("hello.pdf");

        // No configuration, no extra binaries, no complicated setup
        // It just works across Windows, Linux, macOS, and Docker
    }
}
Imports IronPdf

Class Program
    Shared Async Function Main() As Task
        ' Your first PDF in 3 lines of code
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Hello World</h1>")
        pdf.SaveAs("hello.pdf")

        ' No configuration, no extra binaries, no complicated setup
        ' It just works across Windows, Linux, macOS, and Docker
    End Function
End Class
$vbLabelText   $csharpLabel

Com o IronPDF, gere qualquer conteúdo HTML ou conteúdo web gerado dinamicamente em um documento PDF profissional em apenas algumas linhas. A biblioteca lida com a conversão de HTML para PDF, dimensionamento de páginas, suporte a CSS, URLs relativas, imagens e muito mais — tudo sem configurações complexas.

Seja para criar faturas, relatórios ou páginas web completas em formato PDF, o IronPDF integra-se perfeitamente ao Visual Studio e a aplicações .NET . Você obtém uma renderização confiável de elementos HTML, estrutura de documento adequada e controle total sobre permissões de arquivo e campos de formulário, tudo isso mantendo seu código simples e de fácil manutenção.

Precisa de ajuda? A equipe de suporte do IronPDF responde em média em 23 segundos — com engenheiros reais disponíveis 24 horas por dia, 7 dias por semana. Sem chatbots, sem scripts, apenas especialistas que conhecem a biblioteca.

Recursos para começar:

Conclusão

Criamos o IronPDF porque estávamos cansados ​​da frustração que os desenvolvedores enfrentavam com outras bibliotecas: código desatualizado, soluções "gratuitas" que custavam semanas de depuração, peculiaridades específicas da plataforma e perguntas de suporte sem resposta.

Oito anos depois, com mais de 10 milhões de downloads no NuGet , o IronPDF continua sendo a única biblioteca de conversão de HTML para PDF que:

  • Atualizações mensais com melhorias e suporte for .NET
  • Funciona de forma consistente em Windows, Linux, macOS e Docker
  • Oferece suporte real ao desenvolvedor em vez de fóruns ou chatbots
  • Integra-se perfeitamente com ferramentas modernas de codificação de IA
  • Inclui recursos de OCR e manipulação de PDF
  • Atende aos padrões de conformidade da Seção 508, PDF/A e PDF/UA

Olha, a gente entende – ninguém quer pagar por uma biblioteca de PDFs. Mas a realidade é a seguinte: você vai pagar de qualquer jeito. Você pode pagar $799 uma única vez pelo IronPDF, ou pode pagar com semanas de depuração, falhas em produção e, eventualmente, comprando o IronPDF de qualquer maneira depois que tudo mais falhar.

Não criamos o IronPDF para ser apenas mais uma opção. Nós o criamos para ser a solução. Existe um motivo para termos 10 milhões de downloads e clientes como a NASA, a Tesla e a Casa Branca: os desenvolvedores experimentam as opções "gratuitas", perdem semanas e depois vêm até nós. Poupe-se da viagem.

Pronto para parar de brigar com a geração de PDFs?

IronPDF: Obtenha a solução certa logo na primeira tentativa. Você (e seus usuários) agradecerão no futuro.

Perguntas frequentes

O que diferencia o IronPDF de outras bibliotecas de HTML para PDF em C#?

O IronPDF oferece um processo de instalação simplificado em comparação com outras soluções de conversão de HTML para PDF, reduzindo a necessidade de instalar vários pacotes, baixar binários adicionais e configurar caminhos de arquivos. Essa simplicidade ajuda a evitar diferenças entre plataformas e minimiza a depuração.

Por que a facilidade de configuração é importante em bibliotecas de HTML para PDF?

A facilidade de configuração é crucial porque economiza tempo dos desenvolvedores e reduz a complexidade envolvida na integração da biblioteca em aplicativos. O IronPDF simplifica significativamente esse processo em comparação com outras soluções.

Como o IronPDF lida com as diferenças entre plataformas?

O IronPDF gerencia as diferenças entre plataformas de forma integrada, o que elimina a necessidade de os desenvolvedores configurarem ou depurarem manualmente problemas de compatibilidade em diferentes sistemas operacionais.

Quais são os desafios comuns enfrentados por outras soluções de conversão de HTML para PDF?

Outras soluções geralmente exigem configurações demoradas, como a instalação de pacotes adicionais, a configuração de caminhos de arquivos e o tratamento de problemas específicos da plataforma, o que pode levar a um aumento do tempo gasto em depuração e manutenção.

Como o IronPDF melhora o processo de depuração?

O IronPDF reduz a probabilidade de falhas e complicações durante a configuração e execução, resultando em menos sessões de depuração em comparação com outras bibliotecas de conversão de HTML para PDF.

O IronPDF é adequado para aplicações em larga escala?

Sim, o IronPDF foi projetado para lidar com aplicações de grande escala de forma eficiente, oferecendo desempenho robusto e um processo de conversão confiável, essencial para projetos de nível empresarial.

Quais são os benefícios que os desenvolvedores obtêm ao usar o IronPDF?

Os desenvolvedores se beneficiam da rápida integração do IronPDF, da complexidade reduzida de configuração e dos recursos confiáveis de conversão de HTML para PDF, o que economiza tempo e recursos no desenvolvimento de software.

O IronPDF consegue lidar com estruturas HTML complexas?

O IronPDF é capaz de converter com precisão estruturas HTML complexas em formato PDF, preservando estilos, layouts e elementos interativos com alta fidelidade.

Como o IronPDF garante a compatibilidade entre plataformas?

O IronPDF foi projetado para ser multiplataforma, garantindo que funcione de forma consistente em diversos sistemas operacionais sem exigir configuração adicional por parte do desenvolvedor.

O que torna o IronPDF uma escolha confiável para conversão de HTML para PDF?

A confiabilidade do IronPDF deriva de sua facilidade de uso, desempenho robusto e capacidade de lidar com documentos HTML complexos sem comprometer a qualidade ou a velocidade.

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