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
| 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 |
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
- Mesclar e dividir PDFs : combine vários PDFs ou extraia páginas específicas com chamadas de método simples.
- Assinaturas digitais : Aplique assinaturas criptográficas com suporte a certificados.
- Gestão de Formulários : Crie formulários preenchíveis a partir de HTML ou manipule formulários PDF existentes.
- Marcas d'água e carimbos : Adicione marcas d'água de texto ou imagem com controle de transparência.
- Cabeçalhos e rodapés : Cabeçalhos/rodapés dinâmicos com numeração de páginas
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)
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
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:
- Adquira o GemBox.Document separadamente (custo adicional de US$ 890)
- Use GemBox.Document para converter HTML em DOCX
- 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")
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çãoIronPdf.Linux: Pré-configurado para implantações LinuxIronPdf.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")
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
- Instale o pacote NuGet
- Não é necessária chave de licença para desenvolvimento.
- As marcas d'água aparecem em PDFs no modo de avaliação.
- Acesso a todos os recursos durante a avaliação.
Experimente o GemBox.Pdf
- Instale o pacote NuGet
- Use
ComponentInfo.SetLicense("FREE-LIMITED-KEY") - Limitado a 2 páginas no modo gratuito.
- 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
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.
Selecionar Formulários Web como modelo de projeto - adequado para implementações em IronPDF e GemBox.Pdf
Instalando bibliotecas PDF via NuGet
Clique com o botão direito do mouse no seu projeto no Solution Explorer para acessar o NuGet Package Manager e instalar a biblioteca.
Acesso alternativo ao Gerenciador de Pacotes NuGet através do menu Projeto no Visual Studio.
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
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.
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.



