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

IronPDF vs GemBox.Pdf: Guia completo de comparação de bibliotecas .NET para conversão de HTML para PDF

Ao desenvolver aplicações .NET que requerem geração e manipulação de PDFs, escolher a biblioteca C# PDF correta pode impactar significativamente o sucesso do seu projeto. Esta comparação abrangente examina o IronPDF e o GemBox.Pdf , duas importantes bibliotecas PDF for .NET , para ajudar os desenvolvedores a tomar uma decisão informada com base em recursos, desempenho, preço e casos de uso reais.

Visão geral da comparação rápida

Visão geral da comparação de produtos
Comparação de recursos do IronPDF e do GemBox.Pdf para desenvolvimento em .NET
Categoria Característica/Aspecto IronPDF GemBox.Pdf Principal vantagem
**Arquitetura Central** Filosofia de Design HTML em primeiro lugar, renderização do Chrome manipulação nativa de PDF Dependente do contexto
Complexidade da API Métodos simples como `RenderHtmlAsPdf()` Objetos PDF de baixo nível IronPDF: Desenvolvimento mais rápido
Curva de Aprendizagem 1 a 2 dias normalmente 3 a 5 dias normalmente IronPDF: Adoção mais rápida
**Suporte da plataforma** Multiplataforma Windows, Linux, macOS, Docker Windows, Linux, macOS, Android, iOS GemBox: Suporte para dispositivos móveis
Versões .NET .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ .NET 6, Standard 2.0, Framework 3.5+ IronPDF: Suporte mais recente for .NET
Plataformas em nuvem Otimizado para Azure/AWS Suporte padrão em nuvem IronPDF: Pronto para a nuvem
**HTML para PDF** Motor de renderização Motor V8 totalmente cromado Sem suporte HTML integrado* IronPDF: Conversão nativa de HTML para PDF
Suporte a CSS3/HTML5 Suporte completo Requer GemBox.Document IronPDF: Padrões modernos da web
Execução de JavaScript Suporte completo a JavaScript Sem suporte for JavaScript IronPDF: Conteúdo dinâmico
Velocidade de renderização ~125ms típico N/A (sem suporte a HTML) IronPDF: Renderização rápida
**Experiência do desenvolvedor** Exemplos de código Mais de 100 amostras prontas para uso Mais de 100 exemplos disponíveis Ambos: Recursos extensos
Documentação Tutoriais, instruções, vídeos Documentação da API focada IronPDF: Vários caminhos de aprendizagem
**Manipulação de Conteúdo** Unir/Dividir PDFs Métodos integrados Métodos integrados Ambos: Recursos padrão
Extração de texto Suporte a Unicode, integração de OCR Suporte a Unicode, OCR integrado. GemBox: OCR integrado
Suporte a formulários Formulários HTML para formulários PDF Criar, preencher e achatar formulários Dependente do contexto
**Métricas de desempenho** Uso de memória Normalmente menos de 10 MB Baixo consumo de memória Ambos: Eficientes
Suporte de rosca Otimizado para async/await nativo Operações seguras para roscas IronPDF: Melhor suporte assíncrono
**Security & Encryption** Níveis de criptografia AES-256, manipuladores personalizados Padrão AES-256 Ambos: Padrão da indústria
Assinaturas digitais Assinaturas visuais integradas Suporte para assinatura digital Ambos: Suporte à assinatura
**Licensing & Pricing** Nível inicial Lite: $799 (1 dev, 1 project) Desenvolvedor individual: US$ 890 (1 desenvolvedor, projetos ilimitados) IronPDF: Custo de entrada mais baixo
Redistribuição +US$ 1.999 isento de royalties Implantações ilimitadas incluídas. GemBox: Melhores termos de implantação
Opção de Suíte Iron Suite: $1,498 (9 products) Pacote GemBox: US$ 2.200 (7 produtos) IronPDF: Melhor custo-benefício em suítes
**Apoiar** Suporte incluído Sim, suporte técnico 24 horas por dia, 5 dias por semana. Sim, 1 ano de suporte profissional. Ambos: Bom suporte
Tempo de resposta 24-48 horas normalmente Em até 1 dia útil Ambos: Resposta rápida
**Ideal para** Casos de uso HTML para PDF, aplicativos da web, relatórios Manipulação de PDF, formulários, OCR Dependente do contexto
*Observação:* O GemBox.Pdf concentra-se na manipulação de PDFs e requer o GemBox.Document para conversão em HTML. O IronPDF oferece conversão nativa de HTML para PDF com renderização completa no navegador. *O suporte a HTML no GemBox requer a compra de um produto adicional.

ObserveO GemBox.Pdf requer a biblioteca separada GemBox.Document (US$ 890 adicionais) para conversão de HTML para PDF.

O que é a biblioteca IronPDF ?

O IronPDF se destaca como uma biblioteca .NET PDF abrangente, projetada especificamente para tornar a conversão de HTML para PDF perfeita para desenvolvedores. Construído com um mecanismo de renderização do Chrome em seu núcleo, o IronPDF transforma a maneira como os desenvolvedores abordam a geração de PDFs em aplicativos C#, F# e VB .NET .

A filosofia da biblioteca centra-se no aproveitamento das competências já existentes em desenvolvimento web. Em vez de aprender APIs complexas de PDF, os desenvolvedores podem usar HTML, CSS e JavaScript, que já conhecem, para criar documentos PDF sofisticados. Essa abordagem reduz drasticamente o tempo de desenvolvimento, garantindo ao mesmo tempo uma renderização perfeita em cada pixel, em conformidade com os padrões modernos da web.

Principais funcionalidades do IronPDF

O IronPDF oferece um conjunto abrangente de recursos que cobre praticamente todas as tarefas relacionadas a PDF que os desenvolvedores possam encontrar:

Excelência na conversão de HTML para PDF

  • Motor Chrome V8: Renderiza HTML usando o mesmo motor do Google Chrome, garantindo mais de 98% de fidelidade ao navegador.
  • Suporte completo a CSS3/HTML5: Suporte completo aos padrões web modernos, incluindo flexbox, grid e animações.
  • Execução de JavaScript : Processa o JavaScript antes da renderização, capturando o conteúdo dinâmico com perfeição.
  • Design responsivo: Suporta layouts responsivos com configurações de viewport personalizáveis.
  • Suporte a fontes da Web: renderiza fontes do Google, fontes personalizadas e fontes de ícones com precisão.

Manipulação avançada de PDF

Segurança e Conformidade

  • Criptografia : Criptografia AES-256 com configurações de permissão personalizadas
  • Conformidade com PDF/A : Gere PDFs com qualidade de arquivo para armazenamento de longo prazo.
  • Redação : Remover permanentemente conteúdo sensível.
  • Proteção por senha: Suporte para senhas de usuário e proprietário com permissões detalhadas.

Exemplo de código IronPDF : HTML para PDF com recursos avançados

using IronPdf;
using IronPdf.Rendering;

// Configure the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        // Set paper orientation and size
        PaperOrientation = PdfPaperOrientation.Portrait,
        PaperSize = PdfPaperSize.A4,

        // Configure margins (in millimeters)
        MarginTop = 25,
        MarginBottom = 25,
        MarginLeft = 20,
        MarginRight = 20,

        // Enable JavaScript execution
        EnableJavaScript = true,
        RenderDelay = 1000, // Wait 1 second for JS to complete

        // Print background colors and images
        PrintHtmlBackgrounds = true,

        // Create PDF forms from HTML form elements
        CreatePdfFormsFromHtml = true,

        // Custom header and footer
        HtmlHeader = new HtmlHeaderFooter
        {
            Height = 20,
            HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
            DrawDividerLine = true
        },

        HtmlFooter = new HtmlHeaderFooter
        {
            Height = 15,
            HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
        }
    }
};

// Convert complex HTML with CSS and JavaScript
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
        .invoice-header { 
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px;
            margin-bottom: 30px;
        }
        .data-table { 
            width: 100%; 
            border-collapse: collapse; 
            margin-top: 20px;
        }
        .data-table th { 
            background-color: #f8f9fa; 
            padding: 12px; 
            text-align: left;
            border-bottom: 2px solid #dee2e6;
        }
        .data-table td { 
            padding: 10px; 
            border-bottom: 1px solid #dee2e6;
        }
        .total-section {
            margin-top: 30px;
            text-align: right;
            font-size: 18px;
            font-weight: bold;
        }
        @media print {
            .no-print { display: none; }
        }
    </style>
</head>
<body>
    <div class='invoice-header'>
        <h1>Invoice #INV-2025-001</h1>
        <p>Date: <span id='current-date'></span></p>
    </div>

    <table class='data-table'>
        <thead>
            <tr>
                <th>Item Description</th>
                <th>Quantity</th>
                <th>Unit Price</th>
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Professional PDF Library License</td>
                <td>1</td>
                <td>$799.00</td>
                <td>$799.00</td>
            </tr>
            <tr>
                <td>Priority Support (1 Year)</td>
                <td>1</td>
                <td>$299.00</td>
                <td>$299.00</td>
            </tr>
        </tbody>
    </table>

    <div class='total-section'>
        <p>Subtotal: $1,048.00</p>
        <p>Tax (8%): $83.84</p>
        <p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
    </div>

    <script>
        // Dynamic date insertion
        document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
            year: 'numeric',
            month: 'long',
            day: 'numeric'
        });
    </script>
</body>
</html>";

// Render the HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;

// Add metadata
pdf.MetaData.Author = "Invoice System";
pdf.MetaData.Title = "Invoice INV-2025-001";
pdf.MetaData.Subject = "Customer Invoice";
pdf.MetaData.Keywords = "invoice, payment, 2025";
pdf.MetaData.CreationDate = DateTime.Now;

// Save the PDF
pdf.SaveAs("invoice-2025-001.pdf");

// Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3);
using IronPdf;
using IronPdf.Rendering;

// Configure the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer
{
    RenderingOptions = new ChromePdfRenderOptions
    {
        // Set paper orientation and size
        PaperOrientation = PdfPaperOrientation.Portrait,
        PaperSize = PdfPaperSize.A4,

        // Configure margins (in millimeters)
        MarginTop = 25,
        MarginBottom = 25,
        MarginLeft = 20,
        MarginRight = 20,

        // Enable JavaScript execution
        EnableJavaScript = true,
        RenderDelay = 1000, // Wait 1 second for JS to complete

        // Print background colors and images
        PrintHtmlBackgrounds = true,

        // Create PDF forms from HTML form elements
        CreatePdfFormsFromHtml = true,

        // Custom header and footer
        HtmlHeader = new HtmlHeaderFooter
        {
            Height = 20,
            HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
            DrawDividerLine = true
        },

        HtmlFooter = new HtmlHeaderFooter
        {
            Height = 15,
            HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
        }
    }
};

// Convert complex HTML with CSS and JavaScript
string htmlContent = @"
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
        .invoice-header { 
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px;
            margin-bottom: 30px;
        }
        .data-table { 
            width: 100%; 
            border-collapse: collapse; 
            margin-top: 20px;
        }
        .data-table th { 
            background-color: #f8f9fa; 
            padding: 12px; 
            text-align: left;
            border-bottom: 2px solid #dee2e6;
        }
        .data-table td { 
            padding: 10px; 
            border-bottom: 1px solid #dee2e6;
        }
        .total-section {
            margin-top: 30px;
            text-align: right;
            font-size: 18px;
            font-weight: bold;
        }
        @media print {
            .no-print { display: none; }
        }
    </style>
</head>
<body>
    <div class='invoice-header'>
        <h1>Invoice #INV-2025-001</h1>
        <p>Date: <span id='current-date'></span></p>
    </div>

    <table class='data-table'>
        <thead>
            <tr>
                <th>Item Description</th>
                <th>Quantity</th>
                <th>Unit Price</th>
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Professional PDF Library License</td>
                <td>1</td>
                <td>$799.00</td>
                <td>$799.00</td>
            </tr>
            <tr>
                <td>Priority Support (1 Year)</td>
                <td>1</td>
                <td>$299.00</td>
                <td>$299.00</td>
            </tr>
        </tbody>
    </table>

    <div class='total-section'>
        <p>Subtotal: $1,048.00</p>
        <p>Tax (8%): $83.84</p>
        <p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
    </div>

    <script>
        // Dynamic date insertion
        document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
            year: 'numeric',
            month: 'long',
            day: 'numeric'
        });
    </script>
</body>
</html>";

// Render the HTML to PDF
PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;

// Add metadata
pdf.MetaData.Author = "Invoice System";
pdf.MetaData.Title = "Invoice INV-2025-001";
pdf.MetaData.Subject = "Customer Invoice";
pdf.MetaData.Keywords = "invoice, payment, 2025";
pdf.MetaData.CreationDate = DateTime.Now;

// Save the PDF
pdf.SaveAs("invoice-2025-001.pdf");

// Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3);
Imports IronPdf
Imports IronPdf.Rendering

' Configure the Chrome renderer with advanced options
Dim renderer As New ChromePdfRenderer With {
    .RenderingOptions = New ChromePdfRenderOptions With {
        ' Set paper orientation and size
        .PaperOrientation = PdfPaperOrientation.Portrait,
        .PaperSize = PdfPaperSize.A4,

        ' Configure margins (in millimeters)
        .MarginTop = 25,
        .MarginBottom = 25,
        .MarginLeft = 20,
        .MarginRight = 20,

        ' Enable JavaScript execution
        .EnableJavaScript = True,
        .RenderDelay = 1000, ' Wait 1 second for JS to complete

        ' Print background colors and images
        .PrintHtmlBackgrounds = True,

        ' Create PDF forms from HTML form elements
        .CreatePdfFormsFromHtml = True,

        ' Custom header and footer
        .HtmlHeader = New HtmlHeaderFooter With {
            .Height = 20,
            .HtmlFragment = "<div style='text-align: center; font-size: 12px;'>Company Report - {page} of {total-pages}</div>",
            .DrawDividerLine = True
        },

        .HtmlFooter = New HtmlHeaderFooter With {
            .Height = 15,
            .HtmlFragment = "<div style='text-align: center; font-size: 10px;'>© 2025 Company Name. Confidential.</div>"
        }
    }
}

' Convert complex HTML with CSS and JavaScript
Dim htmlContent As String = "
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: 'Segoe UI', Arial, sans-serif; line-height: 1.6; }
        .invoice-header { 
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px;
            margin-bottom: 30px;
        }
        .data-table { 
            width: 100%; 
            border-collapse: collapse; 
            margin-top: 20px;
        }
        .data-table th { 
            background-color: #f8f9fa; 
            padding: 12px; 
            text-align: left;
            border-bottom: 2px solid #dee2e6;
        }
        .data-table td { 
            padding: 10px; 
            border-bottom: 1px solid #dee2e6;
        }
        .total-section {
            margin-top: 30px;
            text-align: right;
            font-size: 18px;
            font-weight: bold;
        }
        @media print {
            .no-print { display: none; }
        }
    </style>
</head>
<body>
    <div class='invoice-header'>
        <h1>Invoice #INV-2025-001</h1>
        <p>Date: <span id='current-date'></span></p>
    </div>

    <table class='data-table'>
        <thead>
            <tr>
                <th>Item Description</th>
                <th>Quantity</th>
                <th>Unit Price</th>
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Professional PDF Library License</td>
                <td>1</td>
                <td>$799.00</td>
                <td>$799.00</td>
            </tr>
            <tr>
                <td>Priority Support (1 Year)</td>
                <td>1</td>
                <td>$299.00</td>
                <td>$299.00</td>
            </tr>
        </tbody>
    </table>

    <div class='total-section'>
        <p>Subtotal: $1,048.00</p>
        <p>Tax (8%): $83.84</p>
        <p style='color: #667eea; font-size: 24px;'>Total: $1,131.84</p>
    </div>

    <script>
        // Dynamic date insertion
        document.getElementById('current-date').textContent = new Date().toLocaleDateString('en-US', {
            year: 'numeric',
            month: 'long',
            day: 'numeric'
        });
    </script>
</body>
</html>"

' Render the HTML to PDF
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)

' Apply additional security settings
pdf.SecuritySettings.OwnerPassword = "admin123"
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserFormData = True

' Add metadata
pdf.MetaData.Author = "Invoice System"
pdf.MetaData.Title = "Invoice INV-2025-001"
pdf.MetaData.Subject = "Customer Invoice"
pdf.MetaData.Keywords = "invoice, payment, 2025"
pdf.MetaData.CreationDate = DateTime.Now

' Save the PDF
pdf.SaveAs("invoice-2025-001.pdf")

' Optional: Save as PDF/A for archival
pdf.SaveAsPdfA("invoice-2025-001-archive.pdf", PdfAVersions.PdfA3)
$vbLabelText   $csharpLabel

Este exemplo demonstra a capacidade do IronPDF de lidar com layouts HTML complexos com gradientes, tabelas, conteúdo JavaScript dinâmico e recursos avançados de PDF, como configurações de segurança e metadados. A biblioteca processa tudo perfeitamente, produzindo um PDF profissional que corresponde exatamente ao design HTML.

O que é a biblioteca GemBox.Pdf?

GemBox.Pdf representa uma abordagem diferente para manipulação de PDF em .NET. Em vez de se concentrar na conversão de HTML para PDF, o GemBox.Pdf se especializa em operações de baixo nível em PDFs e na manipulação direta de PDFs. Isso o torna particularmente adequado para cenários em que os desenvolvedores precisam de controle preciso sobre a estrutura e o conteúdo do PDF.

A biblioteca se destaca no trabalho com documentos PDF existentes, oferecendo recursos robustos para leitura, edição e manipulação de arquivos PDF em um nível granular. O GemBox.Pdf funciona sem depender do Adobe Acrobat, o que facilita a implantação em diversos ambientes.

Principais funcionalidades do GemBox.Pdf

O GemBox.Pdf oferece recursos abrangentes de manipulação de PDFs:

Operações com documentos PDF

  • Ler e escrever PDFs: acesso direto à estrutura e ao conteúdo do PDF.
  • Mesclar e dividir: combine vários PDFs ou extraia páginas específicas.
  • Clonar páginas: Importar páginas entre diferentes documentos PDF
  • Gerenciamento de páginas: Adicione, remova ou reordene páginas programaticamente

Extração e manipulação de conteúdo

  • Extração de texto: Extrair texto Unicode com informações de posicionamento
  • Extração de imagens: Recuperar imagens incorporadas em documentos PDF
  • Suporte a OCR: Reconhecimento óptico de caracteres integrado para documentos digitalizados.
  • Redação de conteúdo: Remova informações confidenciais permanentemente

Formulários e Interatividade

  • Formulários interativos: Crie, preencha, achate e exporte formulários em PDF.
  • Gerenciamento de campos de formulário: acesso programático a todos os tipos de campos de formulário.
  • Anotações: Adicione hiperlinks e outras anotações em PDF.

Elementos gráficos e visuais

  • Operações de desenho: Adicionar texto, imagens e gráficos vetoriais
  • Formas e Caminhos: Crie desenhos vetoriais complexos
  • Marcas d'água: Aplique marcas d'água de texto e imagem.
  • Grupos de conteúdo: Organize o conteúdo em grupos lógicos.

Exemplo de código GemBox.Pdf: Manipulação de PDF e formulários

using GemBox.Pdf;
using GemBox.Pdf.Content;
using GemBox.Pdf.Forms;
using GemBox.Pdf.Security;

// Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY");

// Create a new PDF document from scratch
using (var document = new PdfDocument())
{
    // Add a page with custom size
    var page = document.Pages.Add();

    // Create formatted text with multiple styles
    using (var formattedText = new PdfFormattedText())
    {
        formattedText.FontSize = 24;
        formattedText.FontFamily = new PdfFontFamily("Arial");
        formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6);
        formattedText.AppendLine("GemBox.Pdf Document Example");

        formattedText.FontSize = 12;
        formattedText.Color = PdfColor.FromRgb(0, 0, 0);
        formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.");

        // Draw text to the page
        page.Content.DrawText(formattedText, new PdfPoint(50, 700));
    }

    // Add a form to the document
    var form = document.Form;

    // Create text field
    var textField = form.Fields.AddText(page, 50, 600, 200, 30);
    textField.Name = "CustomerName";
    textField.Value = "Enter your name";
    textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95);

    // Create checkbox
    var checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20);
    checkBox.Name = "Agreement";
    checkBox.Checked = false;

    // Add descriptive text next to checkbox
    using (var checkboxLabel = new PdfFormattedText())
    {
        checkboxLabel.Append("I agree to the terms and conditions");
        page.Content.DrawText(checkboxLabel, new PdfPoint(80, 555));
    }

    // Create submit button
    var submitButton = form.Fields.AddButton(page, 50, 500, 100, 30);
    submitButton.Name = "Submit";
    submitButton.Actions.Activate = PdfActionType.Named;

    // Add button appearance
    using (var buttonText = new PdfFormattedText())
    {
        buttonText.Append("Submit Form");
        buttonText.FontSize = 14;
        buttonText.Color = PdfColor.FromRgb(1, 1, 1);

        // Create button appearance stream
        var appearance = submitButton.Appearance.Normal;
        appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8);
        appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4);
        appearance.Stroke.Width = 1;

        // Draw button background
        appearance.DrawRectangle(new PdfPoint(0, 0), new PdfSize(100, 30), true, true);

        // Draw button text
        appearance.DrawText(buttonText, new PdfPoint(20, 10));
    }

    // Add a table using low-level graphics
    var tableTop = 400;
    var tableLeft = 50;
    var cellWidth = 150;
    var cellHeight = 30;

    // Draw table headers
    page.Content.DrawRectangle(new PdfPoint(tableLeft, tableTop), 
        new PdfSize(cellWidth * 3, cellHeight), true, true);

    using (var headerText = new PdfFormattedText())
    {
        headerText.FontSize = 12;
        headerText.Color = PdfColor.FromRgb(1, 1, 1);
        headerText.Append("Product");
        page.Content.DrawText(headerText, new PdfPoint(tableLeft + 10, tableTop + 10));

        headerText.Clear();
        headerText.Append("Quantity");
        page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth + 10, tableTop + 10));

        headerText.Clear();
        headerText.Append("Price");
        page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10));
    }

    // Draw table data rows
    var rowData = new[]
    {
        new { Product = "PDF Library", Quantity = "1", Price = "$890" },
        new { Product = "Support Plan", Quantity = "1", Price = "$299" },
        new { Product = "Training", Quantity = "2", Price = "$500" }
    };

    var currentY = tableTop - cellHeight;
    foreach (var row in rowData)
    {
        // Draw cell borders
        page.Content.DrawRectangle(new PdfPoint(tableLeft, currentY), 
            new PdfSize(cellWidth, cellHeight), false, true);
        page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth, currentY), 
            new PdfSize(cellWidth, cellHeight), false, true);
        page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth * 2, currentY), 
            new PdfSize(cellWidth, cellHeight), false, true);

        // Draw cell content
        using (var cellText = new PdfFormattedText())
        {
            cellText.FontSize = 11;
            cellText.Append(row.Product);
            page.Content.DrawText(cellText, new PdfPoint(tableLeft + 10, currentY + 10));

            cellText.Clear();
            cellText.Append(row.Quantity);
            page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth + 10, currentY + 10));

            cellText.Clear();
            cellText.Append(row.Price);
            page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10));
        }

        currentY -= cellHeight;
    }

    // Apply security settings
    var securitySettings = document.SecuritySettings;
    securitySettings.DocumentOpenPassword = "user123";
    securitySettings.PermissionsPassword = "owner123";
    securitySettings.Permissions = PdfPermissions.AllowPrint | PdfPermissions.AllowFormFill;

    // Save the document
    document.Save("gembox-example.pdf");
}

// Example: Manipulating existing PDF
using (var existingDoc = PdfDocument.Load("existing-document.pdf"))
{
    // Extract text from first page
    var page = existingDoc.Pages[0];
    var text = page.Content.GetText();
    Console.WriteLine($"Extracted text: {text}");

    // Add watermark to all pages
    foreach (var p in existingDoc.Pages)
    {
        using (var watermark = new PdfFormattedText())
        {
            watermark.Append("CONFIDENTIAL");
            watermark.FontSize = 50;
            watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5);
            watermark.Opacity = 0.3;

            // Calculate center position
            var pageWidth = p.MediaBox.Width;
            var pageHeight = p.MediaBox.Height;
            var textWidth = watermark.Width;
            var textHeight = watermark.Height;

            var x = (pageWidth - textWidth) / 2;
            var y = (pageHeight - textHeight) / 2;

            // Draw watermark diagonally
            p.Content.SaveGraphicsState();
            p.Content.SetTransform(1, 0, 0, 1, x, y);
            p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0);
            p.Content.DrawText(watermark, new PdfPoint(0, 0));
            p.Content.RestoreGraphicsState();
        }
    }

    existingDoc.Save("watermarked-document.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;
using GemBox.Pdf.Forms;
using GemBox.Pdf.Security;

// Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY");

// Create a new PDF document from scratch
using (var document = new PdfDocument())
{
    // Add a page with custom size
    var page = document.Pages.Add();

    // Create formatted text with multiple styles
    using (var formattedText = new PdfFormattedText())
    {
        formattedText.FontSize = 24;
        formattedText.FontFamily = new PdfFontFamily("Arial");
        formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6);
        formattedText.AppendLine("GemBox.Pdf Document Example");

        formattedText.FontSize = 12;
        formattedText.Color = PdfColor.FromRgb(0, 0, 0);
        formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.");

        // Draw text to the page
        page.Content.DrawText(formattedText, new PdfPoint(50, 700));
    }

    // Add a form to the document
    var form = document.Form;

    // Create text field
    var textField = form.Fields.AddText(page, 50, 600, 200, 30);
    textField.Name = "CustomerName";
    textField.Value = "Enter your name";
    textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95);

    // Create checkbox
    var checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20);
    checkBox.Name = "Agreement";
    checkBox.Checked = false;

    // Add descriptive text next to checkbox
    using (var checkboxLabel = new PdfFormattedText())
    {
        checkboxLabel.Append("I agree to the terms and conditions");
        page.Content.DrawText(checkboxLabel, new PdfPoint(80, 555));
    }

    // Create submit button
    var submitButton = form.Fields.AddButton(page, 50, 500, 100, 30);
    submitButton.Name = "Submit";
    submitButton.Actions.Activate = PdfActionType.Named;

    // Add button appearance
    using (var buttonText = new PdfFormattedText())
    {
        buttonText.Append("Submit Form");
        buttonText.FontSize = 14;
        buttonText.Color = PdfColor.FromRgb(1, 1, 1);

        // Create button appearance stream
        var appearance = submitButton.Appearance.Normal;
        appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8);
        appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4);
        appearance.Stroke.Width = 1;

        // Draw button background
        appearance.DrawRectangle(new PdfPoint(0, 0), new PdfSize(100, 30), true, true);

        // Draw button text
        appearance.DrawText(buttonText, new PdfPoint(20, 10));
    }

    // Add a table using low-level graphics
    var tableTop = 400;
    var tableLeft = 50;
    var cellWidth = 150;
    var cellHeight = 30;

    // Draw table headers
    page.Content.DrawRectangle(new PdfPoint(tableLeft, tableTop), 
        new PdfSize(cellWidth * 3, cellHeight), true, true);

    using (var headerText = new PdfFormattedText())
    {
        headerText.FontSize = 12;
        headerText.Color = PdfColor.FromRgb(1, 1, 1);
        headerText.Append("Product");
        page.Content.DrawText(headerText, new PdfPoint(tableLeft + 10, tableTop + 10));

        headerText.Clear();
        headerText.Append("Quantity");
        page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth + 10, tableTop + 10));

        headerText.Clear();
        headerText.Append("Price");
        page.Content.DrawText(headerText, new PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10));
    }

    // Draw table data rows
    var rowData = new[]
    {
        new { Product = "PDF Library", Quantity = "1", Price = "$890" },
        new { Product = "Support Plan", Quantity = "1", Price = "$299" },
        new { Product = "Training", Quantity = "2", Price = "$500" }
    };

    var currentY = tableTop - cellHeight;
    foreach (var row in rowData)
    {
        // Draw cell borders
        page.Content.DrawRectangle(new PdfPoint(tableLeft, currentY), 
            new PdfSize(cellWidth, cellHeight), false, true);
        page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth, currentY), 
            new PdfSize(cellWidth, cellHeight), false, true);
        page.Content.DrawRectangle(new PdfPoint(tableLeft + cellWidth * 2, currentY), 
            new PdfSize(cellWidth, cellHeight), false, true);

        // Draw cell content
        using (var cellText = new PdfFormattedText())
        {
            cellText.FontSize = 11;
            cellText.Append(row.Product);
            page.Content.DrawText(cellText, new PdfPoint(tableLeft + 10, currentY + 10));

            cellText.Clear();
            cellText.Append(row.Quantity);
            page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth + 10, currentY + 10));

            cellText.Clear();
            cellText.Append(row.Price);
            page.Content.DrawText(cellText, new PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10));
        }

        currentY -= cellHeight;
    }

    // Apply security settings
    var securitySettings = document.SecuritySettings;
    securitySettings.DocumentOpenPassword = "user123";
    securitySettings.PermissionsPassword = "owner123";
    securitySettings.Permissions = PdfPermissions.AllowPrint | PdfPermissions.AllowFormFill;

    // Save the document
    document.Save("gembox-example.pdf");
}

// Example: Manipulating existing PDF
using (var existingDoc = PdfDocument.Load("existing-document.pdf"))
{
    // Extract text from first page
    var page = existingDoc.Pages[0];
    var text = page.Content.GetText();
    Console.WriteLine($"Extracted text: {text}");

    // Add watermark to all pages
    foreach (var p in existingDoc.Pages)
    {
        using (var watermark = new PdfFormattedText())
        {
            watermark.Append("CONFIDENTIAL");
            watermark.FontSize = 50;
            watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5);
            watermark.Opacity = 0.3;

            // Calculate center position
            var pageWidth = p.MediaBox.Width;
            var pageHeight = p.MediaBox.Height;
            var textWidth = watermark.Width;
            var textHeight = watermark.Height;

            var x = (pageWidth - textWidth) / 2;
            var y = (pageHeight - textHeight) / 2;

            // Draw watermark diagonally
            p.Content.SaveGraphicsState();
            p.Content.SetTransform(1, 0, 0, 1, x, y);
            p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0);
            p.Content.DrawText(watermark, new PdfPoint(0, 0));
            p.Content.RestoreGraphicsState();
        }
    }

    existingDoc.Save("watermarked-document.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
Imports GemBox.Pdf.Forms
Imports GemBox.Pdf.Security

' Set license (use FREE-LIMITED-KEY for evaluation)
ComponentInfo.SetLicense("FREE-LIMITED-KEY")

' Create a new PDF document from scratch
Using document = New PdfDocument()
	' Add a page with custom size
	Dim page = document.Pages.Add()

	' Create formatted text with multiple styles
	Using formattedText = New PdfFormattedText()
		formattedText.FontSize = 24
		formattedText.FontFamily = New PdfFontFamily("Arial")
		formattedText.Color = PdfColor.FromRgb(0.2, 0.2, 0.6)
		formattedText.AppendLine("GemBox.Pdf Document Example")

		formattedText.FontSize = 12
		formattedText.Color = PdfColor.FromRgb(0, 0, 0)
		formattedText.AppendLine("This document demonstrates PDF creation and manipulation features.")

		' Draw text to the page
		page.Content.DrawText(formattedText, New PdfPoint(50, 700))
	End Using

	' Add a form to the document
	Dim form = document.Form

	' Create text field
	Dim textField = form.Fields.AddText(page, 50, 600, 200, 30)
	textField.Name = "CustomerName"
	textField.Value = "Enter your name"
	textField.Format.Fill.Color = PdfColor.FromRgb(0.95, 0.95, 0.95)

	' Create checkbox
	Dim checkBox = form.Fields.AddCheck(page, 50, 550, 20, 20)
	checkBox.Name = "Agreement"
	checkBox.Checked = False

	' Add descriptive text next to checkbox
	Using checkboxLabel = New PdfFormattedText()
		checkboxLabel.Append("I agree to the terms and conditions")
		page.Content.DrawText(checkboxLabel, New PdfPoint(80, 555))
	End Using

	' Create submit button
	Dim submitButton = form.Fields.AddButton(page, 50, 500, 100, 30)
	submitButton.Name = "Submit"
	submitButton.Actions.Activate = PdfActionType.Named

	' Add button appearance
	Using buttonText = New PdfFormattedText()
		buttonText.Append("Submit Form")
		buttonText.FontSize = 14
		buttonText.Color = PdfColor.FromRgb(1, 1, 1)

		' Create button appearance stream
		Dim appearance = submitButton.Appearance.Normal
		appearance.Fill.Color = PdfColor.FromRgb(0.2, 0.4, 0.8)
		appearance.Stroke.Color = PdfColor.FromRgb(0.1, 0.2, 0.4)
		appearance.Stroke.Width = 1

		' Draw button background
		appearance.DrawRectangle(New PdfPoint(0, 0), New PdfSize(100, 30), True, True)

		' Draw button text
		appearance.DrawText(buttonText, New PdfPoint(20, 10))
	End Using

	' Add a table using low-level graphics
	Dim tableTop = 400
	Dim tableLeft = 50
	Dim cellWidth = 150
	Dim cellHeight = 30

	' Draw table headers
	page.Content.DrawRectangle(New PdfPoint(tableLeft, tableTop), New PdfSize(cellWidth * 3, cellHeight), True, True)

	Using headerText = New PdfFormattedText()
		headerText.FontSize = 12
		headerText.Color = PdfColor.FromRgb(1, 1, 1)
		headerText.Append("Product")
		page.Content.DrawText(headerText, New PdfPoint(tableLeft + 10, tableTop + 10))

		headerText.Clear()
		headerText.Append("Quantity")
		page.Content.DrawText(headerText, New PdfPoint(tableLeft + cellWidth + 10, tableTop + 10))

		headerText.Clear()
		headerText.Append("Price")
		page.Content.DrawText(headerText, New PdfPoint(tableLeft + cellWidth * 2 + 10, tableTop + 10))
	End Using

	' Draw table data rows
	Dim rowData = {
		New With {
			Key .Product = "PDF Library",
			Key .Quantity = "1",
			Key .Price = "$890"
		},
		New With {
			Key .Product = "Support Plan",
			Key .Quantity = "1",
			Key .Price = "$299"
		},
		New With {
			Key .Product = "Training",
			Key .Quantity = "2",
			Key .Price = "$500"
		}
	}

	Dim currentY = tableTop - cellHeight
	For Each row In rowData
		' Draw cell borders
		page.Content.DrawRectangle(New PdfPoint(tableLeft, currentY), New PdfSize(cellWidth, cellHeight), False, True)
		page.Content.DrawRectangle(New PdfPoint(tableLeft + cellWidth, currentY), New PdfSize(cellWidth, cellHeight), False, True)
		page.Content.DrawRectangle(New PdfPoint(tableLeft + cellWidth * 2, currentY), New PdfSize(cellWidth, cellHeight), False, True)

		' Draw cell content
		Using cellText = New PdfFormattedText()
			cellText.FontSize = 11
			cellText.Append(row.Product)
			page.Content.DrawText(cellText, New PdfPoint(tableLeft + 10, currentY + 10))

			cellText.Clear()
			cellText.Append(row.Quantity)
			page.Content.DrawText(cellText, New PdfPoint(tableLeft + cellWidth + 10, currentY + 10))

			cellText.Clear()
			cellText.Append(row.Price)
			page.Content.DrawText(cellText, New PdfPoint(tableLeft + cellWidth * 2 + 10, currentY + 10))
		End Using

		currentY -= cellHeight
	Next row

	' Apply security settings
	Dim securitySettings = document.SecuritySettings
	securitySettings.DocumentOpenPassword = "user123"
	securitySettings.PermissionsPassword = "owner123"
	securitySettings.Permissions = PdfPermissions.AllowPrint Or PdfPermissions.AllowFormFill

	' Save the document
	document.Save("gembox-example.pdf")
End Using

' Example: Manipulating existing PDF
Using existingDoc = PdfDocument.Load("existing-document.pdf")
	' Extract text from first page
	Dim page = existingDoc.Pages(0)
	Dim text = page.Content.GetText()
	Console.WriteLine($"Extracted text: {text}")

	' Add watermark to all pages
	For Each p In existingDoc.Pages
		Using watermark = New PdfFormattedText()
			watermark.Append("CONFIDENTIAL")
			watermark.FontSize = 50
			watermark.Color = PdfColor.FromRgb(0.5, 0.5, 0.5)
			watermark.Opacity = 0.3

			' Calculate center position
			Dim pageWidth = p.MediaBox.Width
			Dim pageHeight = p.MediaBox.Height
			Dim textWidth = watermark.Width
			Dim textHeight = watermark.Height

			Dim x = (pageWidth - textWidth) \ 2
			Dim y = (pageHeight - textHeight) \ 2

			' Draw watermark diagonally
			p.Content.SaveGraphicsState()
			p.Content.SetTransform(1, 0, 0, 1, x, y)
			p.Content.SetTransform(0.7071, 0.7071, -0.7071, 0.7071, 0, 0)
			p.Content.DrawText(watermark, New PdfPoint(0, 0))
			p.Content.RestoreGraphicsState()
		End Using
	Next p

	existingDoc.Save("watermarked-document.pdf")
End Using
$vbLabelText   $csharpLabel

Este exemplo demonstra a robustez do GemBox.Pdf na manipulação de PDFs em baixo nível, incluindo a criação de formulários, desenho de gráficos e recursos de segurança de documentos. Embora o código seja mais verboso do que a abordagem HTML do IronPDF, ele oferece controle preciso sobre todos os aspectos do PDF.

Como essas bibliotecas lidam com a conversão de HTML para PDF?

A abordagem para a conversão de HTML para PDF representa uma das diferenças mais significativas entre o IronPDF e o GemBox.Pdf.

A abordagem de HTML para PDF do IronPDF

O IronPDF foi construído do zero com a conversão de HTML para PDF como seu foco principal. A biblioteca inclui um mecanismo de renderização completo do Chrome que processa HTML, CSS e JavaScript exatamente como um navegador da web faria. Isso significa:

  • Renderização verdadeira do navegador: usa o mesmo mecanismo Blink do Google Chrome.
  • Padrões Web completos: Suporte total para CSS3, HTML5, flexbox, grid e JavaScript moderno.
  • Conteúdo Dinâmico: Executa JavaScript antes da renderização, capturando conteúdo AJAX e elementos dinâmicos.
  • Design responsivo: Lida com consultas de mídia e layouts responsivos
  • Recursos externos: Busca automaticamente imagens, folhas de estilo e fontes a partir de URLs.

Suporte limitado a HTML da GemBox

O GemBox.Pdf em si não suporta a conversão de HTML para PDF . Para converter HTML em PDF com o GemBox, os desenvolvedores devem:

  1. Adquira o GemBox.Document separadamente (custo adicional de US$ 890)
  2. Use GemBox.Document para converter HTML em DOCX
  3. Em seguida, converta o arquivo DOCX para PDF.

Essa abordagem apresenta limitações significativas:

  • Sem suporte a JavaScript : Não é possível processar conteúdo dinâmico.
  • Suporte limitado a CSS: Muitos recursos modernos de CSS não são suportados.
  • Problemas de estilo: Problemas conhecidos com bordas e layouts complexos, conforme observado em discussões no Stack Overflow.
  • Somente otimizado para impressão: Requer HTML formatado especificamente para impressão.
  • Custo adicional: Requer a compra de duas bibliotecas separadas.

Suporte a frameworks CSS modernos: uma diferença crucial

Uma das vantagens mais significativas da renderização do IronPDF baseada no Chrome torna-se evidente ao trabalhar com frameworks CSS modernos como Bootstrap, Tailwind CSS e Foundation. Esses frameworks se tornaram a espinha dorsal das aplicações web modernas, e sua capacidade de renderizar corretamente em PDFs é essencial para muitos casos de uso.

IronPDF: Suporte completo ao framework moderno

O mecanismo de renderização do IronPDF para Chrome oferece suporte nativo e completo a todas as estruturas CSS modernas:

  • Bootstrap 5: Suporte completo a flexbox e CSS Grid para layouts responsivos
  • Tailwind CSS: Suporte completo para framework CSS com foco em utilitários Exemplos práticos: Renderiza a página inicial do Bootstrap e os modelos do Bootstrap com perfeição de pixels.
  • Recursos modernos do CSS3: Animações, transformações, transições, propriedades personalizadas
  • Designs responsivos: Consultas de mídia e layouts baseados na área de visualização funcionam perfeitamente.

Exemplo de código: Formulário Bootstrap para PDF

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapForm = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container mt-5'>
        <h1 class='mb-4'>Customer Registration</h1>
        <form class='needs-validation'>
            <div class='row g-3'>
                <div class='col-md-6'>
                    <label class='form-label'>First Name</label>
                    <input type='text' class='form-control' value='John'>
                </div>
                <div class='col-md-6'>
                    <label class='form-label'>Last Name</label>
                    <input type='text' class='form-control' value='Smith'>
                </div>
            </div>
            <div class='mt-4'>
                <button class='btn btn-primary' type='submit'>Submit</button>
            </div>
        </form>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapForm);
pdf.SaveAs("bootstrap-form.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapForm = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container mt-5'>
        <h1 class='mb-4'>Customer Registration</h1>
        <form class='needs-validation'>
            <div class='row g-3'>
                <div class='col-md-6'>
                    <label class='form-label'>First Name</label>
                    <input type='text' class='form-control' value='John'>
                </div>
                <div class='col-md-6'>
                    <label class='form-label'>Last Name</label>
                    <input type='text' class='form-control' value='Smith'>
                </div>
            </div>
            <div class='mt-4'>
                <button class='btn btn-primary' type='submit'>Submit</button>
            </div>
        </form>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapForm);
pdf.SaveAs("bootstrap-form.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim bootstrapForm As String = "
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container mt-5'>
        <h1 class='mb-4'>Customer Registration</h1>
        <form class='needs-validation'>
            <div class='row g-3'>
                <div class='col-md-6'>
                    <label class='form-label'>First Name</label>
                    <input type='text' class='form-control' value='John'>
                </div>
                <div class='col-md-6'>
                    <label class='form-label'>Last Name</label>
                    <input type='text' class='form-control' value='Smith'>
                </div>
            </div>
            <div class='mt-4'>
                <button class='btn btn-primary' type='submit'>Submit</button>
            </div>
        </form>
    </div>
</body>
</html>"

Dim pdf = renderer.RenderHtmlAsPdf(bootstrapForm)
pdf.SaveAs("bootstrap-form.pdf")
$vbLabelText   $csharpLabel

GemBox: Sem suporte para frameworks modernos

Como o GemBox.Pdf não possui renderização HTML nativa e precisa usar o GemBox.Document para conversão em HTML, os frameworks CSS modernos enfrentam sérias limitações:

  • Sem suporte para Bootstrap: os recursos Flexbox e CSS Grid não serão renderizados corretamente.
  • Sem Tailwind CSS: Classes utilitárias e layouts modernos não são suportados.
  • Soluções manuais necessárias: É preciso criar versões otimizadas para impressão em HTML.
  • CSS3 limitado: Muitos recursos modernos do CSS simplesmente não funcionarão.
  • Complexidade adicional: O processo de conversão em duas etapas (HTML → DOCX → PDF) introduz inconsistências.

De acordo com discussões entre desenvolvedores , até mesmo recursos básicos de CSS, como bordas e layouts, podem apresentar problemas com a abordagem de conversão de HTML do GemBox.

Impacto no mundo real: Se o seu aplicativo usa Bootstrap para a interface do usuário e você precisa gerar relatórios ou exportações em PDF que correspondam à sua interface web, o IronPDF oferece uma solução simples, enquanto o GemBox exigiria uma reformulação significativa ou soluções alternativas manuais.

Para obter mais detalhes sobre a compatibilidade com frameworks CSS, consulte o Guia de CSS do Bootstrap e Flexbox .

Qual biblioteca se destaca em diferentes tarefas com PDFs?

Entender os pontos fortes de cada biblioteca ajuda os desenvolvedores a escolher a ferramenta certa para suas necessidades específicas.

Onde o IronPDF se destaca

O IronPDF demonstra desempenho superior nestes cenários:

1. Geração de PDFs em aplicações web

Ideal para aplicações SaaS, portais web e qualquer sistema que precise converter conteúdo web para PDF. O mecanismo de renderização do Chrome garante que layouts web complexos, incluindo aqueles que utilizam Bootstrap, Tailwind CSS ou frameworks personalizados, sejam renderizados perfeitamente.

2. Geração dinâmica de relatórios

Quando os relatórios incluem gráficos (Chart.js, D3.js), visualização de dados dinâmica ou conteúdo renderizado em JavaScript, o IronPDF captura tudo com precisão. Isso o torna ideal para painéis de Business Intelligence e aplicações orientadas a dados.

3. Modelos de Faturas e Documentos

O uso de modelos HTML/CSS para faturas, recibos e documentos comerciais permite que os designers criem modelos sem precisar aprender APIs específicas para PDF. As alterações podem ser feitas rapidamente usando tecnologias web já conhecidas.

4. Projetos de Desenvolvimento Rápido

A API simples e a abordagem baseada em HTML reduzem significativamente o tempo de desenvolvimento. Um desenvolvedor pode criar um PDF complexo em minutos, em vez de horas.

5. Implantação multiplataforma

Com suporte nativo para Windows, Linux, macOS, Docker e plataformas em nuvem, o IronPDF simplifica a implantação em diversos ambientes.

Onde o GemBox.Pdf se destaca

O arquivo GemBox.Pdf demonstra seus pontos fortes nessas áreas:

1. Manipulação de PDF de baixo nível

Quando é necessário um controle preciso sobre a estrutura do PDF, a abordagem orientada a objetos do GemBox.Pdf fornece acesso direto a elementos, fluxos e dicionários do PDF.

2. Aplicações com uso intensivo de formas

Para aplicações que trabalham extensivamente com formulários PDF, o GemBox.Pdf oferece manipulação abrangente de campos de formulário, incluindo a criação programática de formulários interativos complexos.

3. Requisitos de OCR

Com recursos de OCR integrados, o GemBox.Pdf pode extrair texto de documentos digitalizados sem a necessidade de bibliotecas adicionais, tornando-o adequado para projetos de digitalização de documentos.

4. Desenvolvimento para dispositivos móveis

O suporte nativo para plataformas Android e iOS torna o GemBox.Pdf uma ótima opção para aplicativos móveis que precisam de funcionalidade PDF.

5. Modificação de PDF existente

Ao trabalhar principalmente com PDFs existentes em vez de gerar novos, as ferramentas de extração, manipulação e modificação do GemBox.Pdf são ideais para a tarefa.

Como se comparam a instalação e a configuração?

Ambas as bibliotecas oferecem instalação simples através do NuGet, mas com diferentes níveis de complexidade.

Instalando o IronPDF

A instalação do IronPDF é notavelmente simples:

Install-Package IronPdf

Ou através da CLI do .NET :

dotnet add package IronPdf

O pacote inclui tudo o que é necessário, incluindo o mecanismo de renderização do Chrome. Na maioria dos casos, não são necessárias configurações ou dependências adicionais.

Para cenários de implantação específicos, o IronPDF oferece:

  • IronPdf.Slim: Pacote leve que baixa componentes específicos da plataforma em tempo de execução
  • IronPdf.Linux: Pré-configurado para implantações Linux
  • IronPdf.MacOs: Otimizado para ambientes macOS

Instalando GemBox.Pdf

A instalação do GemBox.Pdf é igualmente simples para manipulação básica de PDFs:

Install-Package GemBox.Pdf

No entanto, para a conversão de HTML para PDF, você precisará de:

Install-Package GemBox.Document

Ambas as bibliotecas requerem configuração de chave de licença:

// IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY";

// GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY");
// IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY";

// GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY");
' IronPDF
License.LicenseKey = "YOUR-LICENSE-KEY"

' GemBox.Pdf
ComponentInfo.SetLicense("YOUR-LICENSE-KEY")
$vbLabelText   $csharpLabel

Quais são as diferenças de licenciamento e preço?

Compreender os modelos de licenciamento ajuda a determinar o custo total de propriedade de cada solução.

Licenciamento IronPDF

O IronPDF oferece licenciamento transparente e escalonado (preços a partir de 2025):

  • Licença Lite: $799

    • 1 desenvolvedor
    • 1 projeto
    • 1 ano de suporte e atualizações
  • Licença Plus: $1,199

    • 3 desenvolvedores
    • 3 projetos
    • 1 ano de suporte e atualizações
  • Licença Profissional: $2,399
    • 10 desenvolvedores
    • 10 projetos
    • 1 ano de suporte e atualizações

Opções adicionais:

  • Redistribuição livre de royalties: +$2,399
  • Licenciamento SaaS/OEM disponível
  • Pacote Iron Suite : $1,498 para 9 produtos

Principais benefícios:

  • Garantia de reembolso de 30 dias
  • Licenças perpétuas (compra única)
  • Desenvolvimento e testes gratuitos
  • Implantação em ambientes de desenvolvimento/teste/produção incluída

Licenciamento do GemBox.Pdf

A GemBox oferece licenciamento por desenvolvedor:

  • Desenvolvedor individual: US$ 890
    • 1 desenvolvedor
    • Projetos ilimitados
    • 1 ano de suporte e atualizações
    • Implantação isenta de royalties incluída

Considerações importantes:

  • A conversão de HTML para PDF requer GemBox.Document: Custo adicional de US$ 890
  • Custo total para conversão de HTML para PDF: mínimo de US$ 1.780
  • 40% de desconto na renovação (60% se renovada antes do vencimento)
  • Pacote GemBox: US$ 2.200 por 7 produtos

Principais benefícios:

  • Garantia de reembolso de 30 dias
  • Licenças perpétuas
  • Implantação ilimitada incluída
  • Não são necessárias licenças de servidor ou OEM.

Comparação de custos para cenários comuns

Cenário Custo do IronPDF Custo do GemBox
Desenvolvedor único, HTML para PDF $799 $1,780
3 desenvolvedores, apenas manipulação de PDF $1,499 $2,670
3 desenvolvedores, HTML para PDF $1,199 $5,340
Empresarial (10 desenvolvedores), recursos completos $2,399 US$ 8.900+

Qual biblioteca você deve escolher?

A escolha entre IronPDF e GemBox.Pdf depende das suas necessidades específicas:

Escolha o IronPDF quando:

  • A conversão de HTML para PDF é um requisito fundamental: a renderização do IronPDF baseada no Chrome é incomparável. Você precisa de suporte web moderno: recursos completos de CSS3, HTML5 e JavaScript.
  • O desenvolvimento rápido é importante: uma API simples reduz o tempo de lançamento no mercado.
  • Você trabalha com conteúdo dinâmico: a execução de JavaScript captura dados em tempo real.
  • É necessária a implantação multiplataforma: excelente suporte para ambientes em nuvem e conteinerizados.
  • O orçamento é um fator importante: custos iniciais mais baixos e melhor relação custo-benefício para cenários de conversão de HTML para PDF.

Escolha GemBox.Pdf quando:

  • O controle de baixo nível do PDF é essencial: acesso direto aos objetos e à estrutura do PDF.
  • É necessário suporte para plataformas móveis: compatibilidade nativa com Android e iOS.
  • OCR é um requisito fundamental: OCR integrado sem dependências adicionais.
  • Você trabalha principalmente com PDFs existentes: Recursos avançados de manipulação e extração.
  • Não é necessário converter HTML para PDF: Evite pagar por GemBox.Document não utilizado.
  • Implantação ilimitada é importante: Redistribuição livre de royalties incluída

Considere usar ambas as bibliotecas quando:

Algumas organizações consideram vantajoso usar ambas as bibliotecas para diferentes partes de sua aplicação:

  • IronPDF para geração de relatórios e conversão de HTML para PDF
  • GemBox.Pdf para processamento de formulários e manipulação de PDFs

Primeiros passos com a biblioteca escolhida

Ambas as bibliotecas oferecem períodos de teste gratuitos para avaliar suas funcionalidades:

Experimente o IronPDF

  1. Instale o pacote NuGet
  2. Não é necessária chave de licença para desenvolvimento.
  3. As marcas d'água aparecem em PDFs no modo de avaliação.
  4. Acesso a todos os recursos durante a avaliação.

Baixe a versão de avaliação gratuita do IronPDF

Experimente o GemBox.Pdf

  1. Instale o pacote NuGet
  2. Use ComponentInfo.SetLicense("FREE-LIMITED-KEY")
  3. Limitado a 2 páginas no modo gratuito.
  4. Atualize para remover as limitações.

Guia de Instalação Visual

Para desenvolvedores que preferem a interface gráfica do Visual Studio, aqui está um guia passo a passo para instalar ambas as bibliotecas:

Criando um novo projeto ASP.NET

Caixa de diálogo Novo Projeto do Visual Studio mostrando a seleção de Aplicativo Web ASP.NET com opções do .NET Framework A caixa de diálogo Novo Projeto do Visual Studio para criar um aplicativo Web ASP.NET — a base para projetos de geração de PDF.

 Tela de seleção de modelo de projeto ASP.NET destacando a opção Web Forms para integração com biblioteca PDF Selecionar Formulários Web como modelo de projeto - adequado para implementações em IronPDF e GemBox.Pdf

Instalando bibliotecas PDF via NuGet

Menu de contexto do Solution Explorer mostrando a opção Gerenciar Pacotes NuGet para adicionar bibliotecas PDF Clique com o botão direito do mouse no seu projeto no Solution Explorer para acessar o NuGet Package Manager e instalar a biblioteca.

Menu Projeto do Visual Studio exibindo a opção Gerenciar Pacotes NuGet para instalação da biblioteca PDF Acesso alternativo ao Gerenciador de Pacotes NuGet através do menu Projeto no Visual Studio.

 Interface do Gerenciador de Pacotes NuGet mostrando a instalação do IronPDF com detalhes da versão e descrição Instalando o IronPDF através do Gerenciador de Pacotes NuGet - observe a descrição completa dos recursos e a quantidade de downloads.

Métodos alternativos de instalação

 Página de download do site oficial do IronPDF mostrando a opção de download direto da DLL para instalação manual O site do IronPDF oferece downloads diretos de DLLs para cenários em que a instalação NuGet não é adequada.

Conclusão

Tanto o IronPDF quanto o GemBox.Pdf são bibliotecas de PDF de alta qualidade para desenvolvedores .NET , cada uma com pontos fortes distintos. O IronPDF se destaca na conversão de HTML para PDF com seu mecanismo de renderização Chrome, tornando-o ideal para aplicativos web modernos e geração de conteúdo dinâmico. O GemBox.Pdf se destaca na manipulação de PDFs em baixo nível e no suporte a dispositivos móveis, sendo perfeito para aplicações que exigem controle preciso de PDFs.

Para a maioria dos desenvolvedores web e equipes que criam aplicativos modernos, o IronPDF oferece a melhor combinação de recursos, facilidade de uso e custo-benefício. Sua capacidade de gerar PDFs com perfeição de pixels a partir de HTML, usando tecnologias web já conhecidas, reduz significativamente o tempo e a complexidade do desenvolvimento.

No entanto, o GemBox.Pdf continua sendo uma escolha sólida para cenários específicos, particularmente para desenvolvimento mobile e aplicações focadas no processamento de formulários PDF ou em requisitos de OCR.

Pronto para transformar seu conteúdo HTML em PDFs profissionais? Comece com o teste gratuito do IronPDF e experimente o poder da renderização com qualidade semelhante à do Chrome em seus aplicativos .NET . Com documentação completa, exemplos de código abrangentes e suporte ágil, você estará gerando PDFs em minutos, não em horas.

ObserveGemBox.Pdf e GemBox.Document são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por GemBox.Pdf ou GemBox.Document. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Perguntas frequentes

Como posso converter HTML para PDF em C#?

Você pode usar o método RenderHtmlAsPdf do IronPDF para converter strings HTML em PDFs. Você também pode converter arquivos HTML em PDFs usando o RenderHtmlFileAsPdf .

Posso manipular arquivos PDF existentes com essas bibliotecas?

Sim, tanto o IronPDF quanto o GemBox.Pdf podem ser usados para manipular arquivos PDF existentes. O IronPDF simplifica tarefas comuns como mesclar, dividir e adicionar marcas d'água. O GemBox.Pdf oferece um controle mais preciso sobre os objetos do PDF, o que é útil para tarefas de manipulação mais complexas.

Quais são as vantagens de usar o IronPDF para conversão de HTML em PDF?

O IronPDF oferece qualidade superior de conversão de HTML para PDF com seu mecanismo de renderização Chrome V8, atingindo mais de 98% de fidelidade ao navegador. Ele suporta CSS3, HTML5 e JavaScript modernos, fontes da web e designs responsivos.

Qual biblioteca é mais econômica para uma pequena equipe de desenvolvimento?

Para uma equipe de 3 desenvolvedores que precisa converter HTML para PDF, o IronPDF custa US$ 1.499 pela licença Plus, enquanto o GemBox custaria US$ 5.340 por 3 licenças GemBox.Pdf e 3 licenças GemBox.Document. O IronPDF oferece um custo-benefício significativamente melhor para equipes.

O IronPDF é adequado para geração de PDFs em grande volume?

Sim, o IronPDF oferece excelente desempenho com um tempo de renderização de HTML para PDF de aproximadamente 125 ms, suporte otimizado para async/await e uso eficiente de memória, com menos de 10 MB. É ideal para geração de PDFs em grande volume a partir da web.

Que tipo de suporte está incluído no IronPDF?

O IronPDF inclui suporte técnico 24 horas por dia, 5 dias por semana, com acesso direto à equipe de desenvolvimento e tempos de resposta típicos de 24 a 48 horas, além de documentação completa e exemplos de código.

Posso criar documentos compatíveis com PDF/A usando essas bibliotecas?

Sim, o IronPDF pode gerar documentos compatíveis com PDF/A com uma chamada de método simples como SaveAsPdfA() , suportando múltiplas versões de PDF/A. O GemBox.Pdf pode ler documentos PDF/A e manter a conformidade ao modificá-los.

Essas bibliotecas são compatíveis com as versões modernas do .NET?

Sim, ambas as bibliotecas são compatíveis com versões modernas do .NET. O IronPDF é compatível com o .NET Framework 4.6.2+, .NET Core 3.1+ e .NET 5 até 10. O GemBox.Pdf é compatível com o .NET Framework 3.5+, .NET Standard 2.0 e .NET 6+.

Qual biblioteca é otimizada para implantação em nuvem?

O IronPDF é otimizado para implantação em nuvem, com suporte específico para Azure, AWS, contêineres Docker e ambientes sem servidor. Sua abordagem baseada em HTML se integra naturalmente a aplicativos web, tornando-o a melhor escolha para aplicativos SaaS.

Existe alguma versão gratuita disponível para testar o IronPDF?

O IronPDF oferece uma opção de avaliação gratuita que permite desenvolvimento e testes ilimitados sem a necessidade de uma chave de licença, embora marcas d'água apareçam na saída. Isso proporciona funcionalidades suficientes para avaliar o produto antes da compra.

Jacob Mellor, Diretor de Tecnologia da Team Iron
Diretor de Tecnologia

Jacob Mellor é Diretor de Tecnologia da Iron Software e um engenheiro visionário pioneiro na tecnologia C# PDF. Como desenvolvedor original do código-fonte principal da Iron Software, ele moldou a arquitetura de produtos da empresa desde sua criação, transformando-a, juntamente com o CEO Cameron Rimington, em uma ...

Leia mais

Equipe de suporte de ferro

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