Como migrar do GemBox PDF para o IronPDF em C#
Migrar do GemBox.Pdf para o IronPDF transforma seu fluxo de trabalho .NET PDF de construção programática baseada em coordenadas para rendering moderno baseado em HTML/CSS. Este guia fornece um caminho de migração abrangente, passo a passo, que remove o limite de modo gratuito de 2 páginas e simplifica a criação de documentos para desenvolvedores .NET profissionais.
Por que Migrar do GemBox.Pdf para o IronPDF
Os Desafios do GemBox.Pdf
GemBox.Pdf é um componente PDF .NET capaz, mas tem limitações que valem a pena pesar para desenvolvimento no mundo real:
-
Limite de Modo Gratuito de 2 Páginas: A versão gratuita gera
FreeLimitReachedExceptionao carregar ou salvar um PDF com mais de 2 páginas, portanto, qualquer coisa além de um recibo de uma página ou fatura de duas páginas requer uma licença paga. (Source: gemboxsoftware.com/pdf/free-version.) -
Sem Conversão de HTML para PDF: GemBox.Pdf não pode renderizar HTML —
PdfDocument.Loadapenas abre arquivos PDF existentes. Para converter HTML para PDF, você tem que comprar o produto GemBox.Document separado (diferente SKU, diferente licença). -
Layout Baseado em Coordenadas: O GemBox.Pdf é uma API de fluxo de conteúdo PDF de baixo nível. Para posicionar texto, você calcula X/Y em unidades de espaço de usuário em PDF e chama
page.Content.DrawText(formattedText, new PdfPoint(x, y)). Não há layout de fluxo. -
Office para PDF exige outros SKUs: Word→PDF precisa de GemBox.Document, Excel→PDF precisa de GemBox.Spreadsheet, cada um licenciado separadamente; o GemBox.Bundle cobre todos eles, mas custa mais.
-
Somente Programático: Cada alteração de design requer alterações de código. Ajustar espaçamento? Recalcular coordenadas. Mudar o tamanho da fonte? Ajuste as posições Y abaixo disso.
-
Preços de Licença Comercial: Licença de um único desenvolvedor custa $890 (renovação $534), pequena equipe (10 desenvolvedores) custa $4,450, grande equipe (50 desenvolvedores) custa $13,350. (Fonte: gemboxsoftware.com/pdf/pricing.)
- Curva de Aprendizado para Design: Desenvolvedores precisam pensar em coordenadas em vez de fluxo de documento, tornando tarefas simples como 'adicionar um parágrafo' surpreendentemente complexas.
Comparação GemBox.Pdf vs IronPDF
| Aspecto | GemBox.Pdf | IronPDF |
|---|---|---|
| Limitações da versão gratuita | máximo de 2 páginas (FreeLimitReachedException) | Apenas marca d'água, sem limite de páginas |
| HTML para PDF | Não suportado (necessita GemBox.Document) | Motor totalmente cromado |
| Word/Excel → PDF | Separate SKUs (GemBox.Document / GemBox.Spreadsheet) | Renderizar via pipeline HTML |
| Abordagem de layout | Manual baseado em coordenadas | Layout de fluxo HTML/CSS |
| CSS moderno | Não aplicável | Flexbox, Grid, animações CSS3 |
| Suporte a JavaScript | Não aplicável | Execução completa de JavaScript |
| Alterações de design | Recalcular coordenadas | Editar HTML/CSS |
| Curva de Aprendizagem | Sistema de coordenadas PDF | HTML/CSS (familiarizado com a web) |
O IronPDF aproveita tecnologias web familiares para geração de PDF no moderno .NET.
Avaliação da Complexidade da Migração
Esforço estimado por funcionalidade
| Recurso | Complexidade da Migração |
|---|---|
| Carregar/Salvar PDFs | Muito baixo |
| Mesclar PDFs | Muito baixo |
| Dividir PDFs | Baixo |
| Extração de texto | Muito baixo |
| Adicionar texto | Médio |
| Tabelas | Baixo |
| Imagens | Baixo |
| Marcas d'água | Baixo |
| Proteção por senha | Médio |
| Campos do formulário | Médio |
Mudança de paradigma
A maior mudança nesta migração do GemBox.Pdf é passar de layout baseado em coordenadas para layout de HTML/CSS:
GemBox.Pdf: 'Desenhe texto na posição (100, 700)'
IronPDF: "Renderize este HTML com estilo CSS"
Essa mudança de paradigma geralmente é mais fácil para desenvolvedores familiarizados com tecnologias web, mas exige uma forma diferente de pensar sobre os PDFs.
Antes de começar
Pré-requisitos
- .NET Version:IronPDF supports .NET Framework 4.6.2+ and .NET Core 2.0+ / .NET 5+
- Chave de licença: Obtenha sua chave de licença do IronPDF em IronPDF
- Backup: Crie uma ramificação para o trabalho de migração.
- Conhecimento de HTML/CSS: Familiaridade básica é útil, mas não obrigatória.
Identifique Todo Uso de GemBox.Pdf
# Find all GemBox.Pdf references
grep -r "GemBox\.Pdf\|PdfDocument\|PdfPage\|PdfFormattedText\|ComponentInfo\.SetLicense" --include="*.cs" .
# Find package references
grep -r "GemBox\.Pdf" --include="*.csproj" .
# Find all GemBox.Pdf references
grep -r "GemBox\.Pdf\|PdfDocument\|PdfPage\|PdfFormattedText\|ComponentInfo\.SetLicense" --include="*.cs" .
# Find package references
grep -r "GemBox\.Pdf" --include="*.csproj" .
Alterações no pacote NuGet
# Remove GemBox.Pdf
dotnet remove package GemBox.Pdf
# Install IronPDF
dotnet add package IronPdf
# Remove GemBox.Pdf
dotnet remove package GemBox.Pdf
# Install IronPDF
dotnet add package IronPdf
Migração de Início Rápido
Etapa 1: Atualizar a configuração da licença
Before (GemBox.Pdf):
// Must call before any GemBox.Pdf operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE");
// Must call before any GemBox.Pdf operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE");
' Must call before any GemBox.Pdf operations
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
' Or for professional:
ComponentInfo.SetLicense("YOUR-PROFESSIONAL-LICENSE")
Após (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or in appsettings.json:
// { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
Imports IronPdf
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
' Or in appsettings.json:
' { "IronPdf.License.LicenseKey": "YOUR-LICENSE-KEY" }
Etapa 2: Atualizar importações de namespace
// Before (GemBox.Pdf)
using GemBox.Pdf;
using GemBox.Pdf.Content;
// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
// Before (GemBox.Pdf)
using GemBox.Pdf;
using GemBox.Pdf.Content;
// After (IronPDF)
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
Etapa 3: Padrão de Conversão Básico
Before (GemBox.Pdf):
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
// PdfFormattedText has no Text property; use Append/AppendLine.
var formattedText = new PdfFormattedText();
formattedText.FontSize = 24;
formattedText.Append("Hello World");
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
// PdfFormattedText has no Text property; use Append/AppendLine.
var formattedText = new PdfFormattedText();
formattedText.FontSize = 24;
formattedText.Append("Hello World");
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim page = document.Pages.Add()
' PdfFormattedText has no Text property; use Append/AppendLine.
Dim formattedText As New PdfFormattedText()
formattedText.FontSize = 24
formattedText.Append("Hello World")
page.Content.DrawText(formattedText, New PdfPoint(100, 700))
document.Save("output.pdf")
End Using
Após (IronPDF):
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>");
pdf.SaveAs("output.pdf");
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>");
pdf.SaveAs("output.pdf");
Imports IronPdf
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1 style='font-size:24px;'>Hello World</h1>")
pdf.SaveAs("output.pdf")
Principais diferenças:
- Não são necessários cálculos de coordenadas
- HTML/CSS em vez de layout programático
- Sem limite de modo gratuito de 2 páginas
- Código mais simples e legível
Referência completa da API
Mapeamento de Namespace
| GemBox.Pdf | IronPDF |
|---|---|
GemBox.Pdf |
IronPdf |
GemBox.Pdf.Content |
IronPdf (o conteúdo é HTML) |
GemBox.Pdf.Security |
IronPdf (SecuritySettings) |
GemBox.Pdf.Forms |
IronPdf.Forms |
Mapeamento de Classes Principais
| GemBox.Pdf | IronPDF | Descrição |
|---|---|---|
PdfDocument |
PdfDocument |
Classe principal de documentos PDF |
PdfPage |
PdfDocument.Pages[i] |
Representação da página |
PdfContent |
Não aplicável (use HTML) | Conteúdo da página |
PdfFormattedText |
Não aplicável (use HTML) | Texto formatado |
PdfPoint |
Não aplicável (usar posicionamento CSS) | Posicionamento por coordenadas |
ComponentInfo.SetLicense() |
IronPdf.License.LicenseKey |
Gestão de licenças |
Operações de Documentos
| GemBox.Pdf | IronPDF |
|---|---|
new PdfDocument() |
new PdfDocument() |
PdfDocument.Load(path) |
PdfDocument.FromFile(path) |
PdfDocument.Load(stream) |
PdfDocument.FromStream(stream) |
document.Save(path) |
pdf.SaveAs(path) |
document.Save(stream) |
pdf.BinaryData (retorna byte[]) |
Operações de página
| GemBox.Pdf | IronPDF |
|---|---|
document.Pages.Add() |
Criar através da renderização HTML |
document.Pages.Count |
pdf.PageCount |
document.Pages[index] |
pdf.Pages[index] |
document.Pages.AddClone(pages) |
PdfDocument.Merge() |
Operações de texto e conteúdo
| GemBox.Pdf | IronPDF |
|---|---|
new PdfFormattedText() |
string HTML |
formattedText.Append(text) |
Incluir em HTML |
formattedText.AppendLine(text) |
Incluir em HTML |
formattedText.FontSize = 12 |
CSS font-size: 12pt |
formattedText.Font = ... |
CSS font-family: ... |
page.Content.DrawText(text, point) |
renderer.RenderHtmlAsPdf(html) |
page.Content.GetText() |
pdf.ExtractTextFromPage(i) |
Exemplos de migração de código
Exemplo 1: Conversão de HTML para PDF
Antes (GemBox.Pdf) — não suportado pelo GemBox.Pdf; necessita do SKU GemBox.Document separado:
// NuGet: Install-Package GemBox.Document
// NOTE: GemBox.Pdf does NOT support HTML-to-PDF. PdfDocument.Load only opens
// existing PDF files. To convert HTML to PDF you must use the separate
// GemBox.Document product (different SKU, different license).
using GemBox.Document;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// GemBox.Document loads HTML and saves as PDF.
var document = DocumentModel.Load("input.html");
document.Save("output.pdf");
}
}
// NuGet: Install-Package GemBox.Document
// NOTE: GemBox.Pdf does NOT support HTML-to-PDF. PdfDocument.Load only opens
// existing PDF files. To convert HTML to PDF you must use the separate
// GemBox.Document product (different SKU, different license).
using GemBox.Document;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
// GemBox.Document loads HTML and saves as PDF.
var document = DocumentModel.Load("input.html");
document.Save("output.pdf");
}
}
Imports GemBox.Document
Module Program
Sub Main()
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
' GemBox.Document loads HTML and saves as PDF.
Dim document = DocumentModel.Load("input.html")
document.Save("output.pdf")
End Sub
End Module
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
End Sub
End Class
A ChromePdfRenderer do IronPDF usa um motor Chromium moderno para renderização de HTML/CSS/JavaScript, portanto, um único pacote NuGet cobre HTML para PDF diretamente — sem SKU separado. Consulte a documentação de conversão de HTML para PDF para obter mais opções de renderização.
Exemplo 2: Mesclar arquivos PDF
Before (GemBox.Pdf):
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using System.Linq;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var source1 = PdfDocument.Load("document1.pdf");
var source2 = PdfDocument.Load("document2.pdf");
document.Pages.AddClone(source1.Pages);
document.Pages.AddClone(source2.Pages);
document.Save("merged.pdf");
}
}
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using System.Linq;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var source1 = PdfDocument.Load("document1.pdf");
var source2 = PdfDocument.Load("document2.pdf");
document.Pages.AddClone(source1.Pages);
document.Pages.AddClone(source2.Pages);
document.Save("merged.pdf");
}
}
}
Imports GemBox.Pdf
Imports System.Linq
Module Program
Sub Main()
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim source1 = PdfDocument.Load("document1.pdf")
Dim source2 = PdfDocument.Load("document2.pdf")
document.Pages.AddClone(source1.Pages)
document.Pages.AddClone(source2.Pages)
document.Save("merged.pdf")
End Using
End Sub
End Module
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
O método estático Merge do IronPDF simplifica a operação — não é necessário criar um documento vazio e clonar páginas individualmente. Saiba mais sobre como mesclar e dividir PDFs .
Exemplo 3: Adicionar texto a um PDF
Before (GemBox.Pdf):
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
// PdfFormattedText has no Text property; use Append/AppendLine.
var formattedText = new PdfFormattedText();
formattedText.FontSize = 24;
formattedText.Append("Hello World");
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
}
}
// NuGet: Install-Package GemBox.Pdf
using GemBox.Pdf;
using GemBox.Pdf.Content;
class Program
{
static void Main()
{
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
// PdfFormattedText has no Text property; use Append/AppendLine.
var formattedText = new PdfFormattedText();
formattedText.FontSize = 24;
formattedText.Append("Hello World");
page.Content.DrawText(formattedText, new PdfPoint(100, 700));
document.Save("output.pdf");
}
}
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
Module Program
Sub Main()
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim page = document.Pages.Add()
' PdfFormattedText has no Text property; use Append/AppendLine.
Dim formattedText As New PdfFormattedText()
formattedText.FontSize = 24
formattedText.Append("Hello World")
page.Content.DrawText(formattedText, New PdfPoint(100, 700))
document.Save("output.pdf")
End Using
End Sub
End Module
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>");
var stamper = new TextStamper()
{
Text = "Hello World",
FontSize = 24,
HorizontalOffset = 100,
VerticalOffset = 700
};
pdf.ApplyStamp(stamper);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>");
var stamper = new TextStamper()
{
Text = "Hello World",
FontSize = 24,
HorizontalOffset = 100,
VerticalOffset = 700
};
pdf.ApplyStamp(stamper);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<p>Original Content</p>")
Dim stamper = New TextStamper() With {
.Text = "Hello World",
.FontSize = 24,
.HorizontalOffset = 100,
.VerticalOffset = 700
}
pdf.ApplyStamp(stamper)
pdf.SaveAs("output.pdf")
End Sub
End Class
Para adicionar texto a PDFs existentes, o IronPDF oferece a classe TextStamper que oferece controle preciso de posicionamento. Para novos documentos, basta incluir o texto no seu modelo HTML. Consulte a documentação de estampagem para opções adicionais.
Exemplo 4: Criando tabelas (A maior melhoria!)
Antes (GemBox.Pdf) — layout baseado em coordenadas, limitado a 2 páginas no modo gratuito:
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
double y = 700;
double[] xPositions = { 50, 200, 300, 400 };
// Headers
var headers = new[] { "Product", "Price", "Qty", "Total" };
for (int i = 0; i < headers.Length; i++)
{
var text = new PdfFormattedText();
text.FontSize = 12;
text.Append(headers[i]);
page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
}
y -= 20;
// Data rows — each row requires manual Y advancement,
// and free mode caps the saved file at 2 pages total.
document.Save("products.pdf");
}
using GemBox.Pdf;
using GemBox.Pdf.Content;
ComponentInfo.SetLicense("FREE-LIMITED-KEY");
using (var document = new PdfDocument())
{
var page = document.Pages.Add();
double y = 700;
double[] xPositions = { 50, 200, 300, 400 };
// Headers
var headers = new[] { "Product", "Price", "Qty", "Total" };
for (int i = 0; i < headers.Length; i++)
{
var text = new PdfFormattedText();
text.FontSize = 12;
text.Append(headers[i]);
page.Content.DrawText(text, new PdfPoint(xPositions[i], y));
}
y -= 20;
// Data rows — each row requires manual Y advancement,
// and free mode caps the saved file at 2 pages total.
document.Save("products.pdf");
}
Imports GemBox.Pdf
Imports GemBox.Pdf.Content
ComponentInfo.SetLicense("FREE-LIMITED-KEY")
Using document As New PdfDocument()
Dim page = document.Pages.Add()
Dim y As Double = 700
Dim xPositions As Double() = {50, 200, 300, 400}
' Headers
Dim headers = New String() {"Product", "Price", "Qty", "Total"}
For i As Integer = 0 To headers.Length - 1
Dim text As New PdfFormattedText()
text.FontSize = 12
text.Append(headers(i))
page.Content.DrawText(text, New PdfPoint(xPositions(i), y))
Next
y -= 20
' Data rows — each row requires manual Y advancement,
' and free mode caps the saved file at 2 pages total.
document.Save("products.pdf")
End Using
Depois (IronPDF) — sem limite de páginas, tabelas HTML apropriadas:
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var html = @"
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>Product</th>
<th>Price</th>
<th>Qty</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
<tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>
</tbody>
</table>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
using IronPdf;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var html = @"
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>Product</th>
<th>Price</th>
<th>Qty</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
<tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>
</tbody>
</table>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
Imports IronPdf
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim html As String = "
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
tr:nth-child(even) { background-color: #f2f2f2; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>Product</th>
<th>Price</th>
<th>Qty</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr><td>Widget A</td><td>$19.99</td><td>5</td><td>$99.95</td></tr>
<tr><td>Widget B</td><td>$29.99</td><td>3</td><td>$89.97</td></tr>
</tbody>
</table>
</body>
</html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("products.pdf")
Esta é a melhoria mais significativa na migração do GemBox.Pdf. Tabelas que empurrariam um documento GemBox.Pdf no modo gratuito além do limite de 2 páginas renderizam sem esse limite no IronPDF, com suporte completo para estilização CSS.
Notas críticas sobre migração
Coordenadas para posicionamento CSS
Se precisar de posicionamento pixel-perfect (semelhante ao sistema de coordenadas do GemBox.Pdf), use o posicionamento absoluto do CSS:
<div style="position:absolute; left:50px; top:750px; font-size:24px;">
Text positioned at specific coordinates
</div>
<div style="position:absolute; left:50px; top:750px; font-size:24px;">
Text positioned at specific coordinates
</div>
Indexação de páginas
Tanto o GemBox.Pdf quanto o IronPDF usam páginas indexadas em 0, tornando este aspecto da migração simples:
// GemBox.Pdf
var page = document.Pages[0];
// IronPDF
var page = pdf.Pages[0];
// GemBox.Pdf
var page = document.Pages[0];
// IronPDF
var page = pdf.Pages[0];
' GemBox.Pdf
Dim page = document.Pages(0)
' IronPDF
Dim page = pdf.Pages(0)
Configurações de segurança
// GemBox.Pdf
var encryption = document.SaveOptions.SetPasswordEncryption();
encryption.DocumentOpenPassword = "userPassword";
encryption.PermissionsPassword = "ownerPassword";
// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
// GemBox.Pdf
var encryption = document.SaveOptions.SetPasswordEncryption();
encryption.DocumentOpenPassword = "userPassword";
encryption.PermissionsPassword = "ownerPassword";
// IronPDF
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
' GemBox.Pdf
Dim encryption = document.SaveOptions.SetPasswordEncryption()
encryption.DocumentOpenPassword = "userPassword"
encryption.PermissionsPassword = "ownerPassword"
' IronPDF
pdf.SecuritySettings.UserPassword = "userPassword"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
Solução de problemas
Problema 1: Texto formatado em PDF não encontrado
Problem: PdfFormattedText doesn't exist in IronPDF.
Solução: Utilize HTML com estilização CSS:
// GemBox.Pdf
var text = new PdfFormattedText();
text.FontSize = 24;
text.Append("Hello");
// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// GemBox.Pdf
var text = new PdfFormattedText();
text.FontSize = 24;
text.Append("Hello");
// IronPDF
var html = "<p style='font-size:24px;'>Hello</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
Imports GemBox.Pdf
Imports IronPDF
Dim text As New PdfFormattedText()
text.FontSize = 24
text.Append("Hello")
Dim html As String = "<p style='font-size:24px;'>Hello</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Problema 2: Método DrawText não encontrado
Problema: page.Content.DrawText() não disponível.
Solução: Crie conteúdo por meio de renderização HTML ou use carimbos:
// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
// For new documents - render HTML
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
// For existing documents - use stampers
var stamper = new TextStamper() { Text = "Added Text" };
pdf.ApplyStamp(stamper);
Imports System
' For new documents - render HTML
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
' For existing documents - use stampers
Dim stamper As New TextStamper() With {.Text = "Added Text"}
pdf.ApplyStamp(stamper)
Problema 3: Diferenças no carregamento de documentos
Problema: PdfDocument.Load() não encontrado.
Solution: Use PdfDocument.FromFile() or FromStream():
// GemBox.Pdf
var doc = PdfDocument.Load("input.pdf");
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
// GemBox.Pdf
var doc = PdfDocument.Load("input.pdf");
// IronPDF
var pdf = PdfDocument.FromFile("input.pdf");
Imports GemBox.Pdf
Imports IronPdf
Dim doc = PdfDocument.Load("input.pdf")
Dim pdf = PdfDocument.FromFile("input.pdf")
Problema 4: Diferenças no método de salvamento
Problema: A assinatura do método document.Save() difere.
Solution: Use SaveAs():
// GemBox.Pdf
document.Save("output.pdf");
// IronPDF
pdf.SaveAs("output.pdf");
// GemBox.Pdf
document.Save("output.pdf");
// IronPDF
pdf.SaveAs("output.pdf");
Lista de verificação para migração
Pré-migração
- Inventário de todo uso de GemBox.Pdf no código
- Identificar layouts baseados em coordenadas que precisam de conversão para HTML.
- Avaliar onde o limite de modo gratuito de 2 páginas afeta seu código
- Obtenha a chave de licença do IronPDF
- Criar branch de migração no controle de versão
Migração de código
- Remova o pacote NuGet GemBox.Pdf:
dotnet remove package GemBox.Pdf - Instale o pacote NuGet IronPDF:
dotnet add package IronPdf - Atualizar importações de namespace
- Substitua
ComponentInfo.SetLicense()porIronPdf.License.LicenseKey - Converta
PdfDocument.Load()paraPdfDocument.FromFile() - Converta
document.Save()parapdf.SaveAs() - Substituir texto baseado em coordenadas por conteúdo HTML
- Converta
PdfFormattedTextpara HTML com estilo CSS - Atualize as operações de mesclagem para usar
PdfDocument.Merge()
Testando
- Verifique se todos os documentos foram gerados corretamente.
- Verificar se a aparência do documento corresponde às expectativas.
- Testar saída multi-página (anteriormente limitada a 2 páginas no modo gratuito)
- Verifique se a extração de texto funciona corretamente.
- Testar operações de mesclagem e divisão
- Validar a funcionalidade de segurança/criptografia
Pós-migração
- Remova chaves de licença GemBox.Pdf
- Atualizar documentação
- Treinar a equipe na abordagem HTML/CSS para PDFs
- Aproveite contagens de páginas ilimitadas sem um limite de modo gratuito!

