IRONSOFTWAREHOME
VÍDEOS

Como adicionar números de página a PDFs usando C#

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

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:

  1. Limite de Modo Gratuito de 2 Páginas: A versão gratuita gera FreeLimitReachedException ao 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.)

  2. Sem Conversão de HTML para PDF: GemBox.Pdf não pode renderizar HTML — PdfDocument.Load apenas abre arquivos PDF existentes. Para converter HTML para PDF, você tem que comprar o produto GemBox.Document separado (diferente SKU, diferente licença).

  3. 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.

  4. 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.

  5. 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.

  6. 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.)

  7. 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

AspectoGemBox.PdfIronPDF
Limitações da versão gratuitamáximo de 2 páginas (FreeLimitReachedException)Apenas marca d'água, sem limite de páginas
HTML para PDFNão suportado (necessita GemBox.Document)Motor totalmente cromado
Word/Excel → PDFSeparate SKUs (GemBox.Document / GemBox.Spreadsheet)Renderizar via pipeline HTML
Abordagem de layoutManual baseado em coordenadasLayout de fluxo HTML/CSS
CSS modernoNão aplicávelFlexbox, Grid, animações CSS3
Suporte a JavaScriptNão aplicávelExecução completa de JavaScript
Alterações de designRecalcular coordenadasEditar HTML/CSS
Curva de AprendizagemSistema de coordenadas PDFHTML/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

RecursoComplexidade da Migração
Carregar/Salvar PDFsMuito baixo
Mesclar PDFsMuito baixo
Dividir PDFsBaixo
Extração de textoMuito baixo
Adicionar textoMédio
TabelasBaixo
ImagensBaixo
Marcas d'águaBaixo
Proteção por senhaMédio
Campos do formulárioMé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"
Text

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

  1. **.NET Version:**IronPDF supports .NET Framework 4.6.2+ and .NET Core 2.0+ / .NET 5+
  2. Chave de licença: Obtenha sua chave de licença do IronPDF em IronPDF
  3. Backup: Crie uma ramificação para o trabalho de migração.
  4. 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" .
SHELL

Alterações no pacote NuGet

# Remove GemBox.Pdf
dotnet remove package GemBox.Pdf

# Install IronPDF
dotnet add package IronPdf
SHELL

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");

Após (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;

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");
}

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");

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.PdfIronPDF
GemBox.PdfIronPdf
GemBox.Pdf.ContentIronPdf (o conteúdo é HTML)
GemBox.Pdf.SecurityIronPdf (SecuritySettings)
GemBox.Pdf.FormsIronPdf.Forms

Mapeamento de Classes Principais

GemBox.PdfIronPDFDescrição
PdfDocumentPdfDocumentClasse principal de documentos PDF
PdfPagePdfDocument.Pages[i]Representação da página
PdfContentNão aplicável (use HTML)Conteúdo da página
PdfFormattedTextNão aplicável (use HTML)Texto formatado
PdfPointNão aplicável (usar posicionamento CSS)Posicionamento por coordenadas
ComponentInfo.SetLicense()IronPdf.License.LicenseKeyGestão de licenças

Operações de Documentos

GemBox.PdfIronPDF
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.PdfIronPDF
document.Pages.Add()Criar através da renderização HTML
document.Pages.Countpdf.PageCount
document.Pages[index]pdf.Pages[index]
document.Pages.AddClone(pages)PdfDocument.Merge()

Operações de texto e conteúdo

GemBox.PdfIronPDF
new PdfFormattedText()string HTML
formattedText.Append(text)Incluir em HTML
formattedText.AppendLine(text)Incluir em HTML
formattedText.FontSize = 12CSS 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");
    }
}

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");
    }
}

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");
        }
    }
}

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");
    }
}

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");
        }
    }
}

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");
    }
}

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");
}

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>
                <!-- Add hundreds or thousands of rows - no limit! -->
            </tbody>
        </table>
    </body>
    </html>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("products.pdf");
C#

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>
HTML

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];

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";

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);

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);

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");

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");

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() por IronPdf.License.LicenseKey
  • Converta PdfDocument.Load() para PdfDocument.FromFile()
  • Converta document.Save() para pdf.SaveAs()
  • Substituir texto baseado em coordenadas por conteúdo HTML
  • Converta PdfFormattedText para 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!

Observe: GemBox.Pdf é uma marca registrada do seu respectivo proprietário. Este site não está associado, endossado ou patrocinado pela GemBox Software Ltd. 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.
Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.