IRONSOFTWAREHOME
VÍDEOS

Como adicionar cabeçalhos e rodapés em PDF usando o IronPDF

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

Apryse (rebrand de PDFTron em 8 de fevereiro de 2023) é um SDK PDF empresarial conhecido por suas capacidades abrangentes de processamento de documentos. Os pacotes NuGet e namespaces .NET continuam a ser enviados sob os IDs históricos PDFTron.* / pdftron.* após a mudança de marca. Apryse usa preços liderados por vendas — pontos de preços públicos não são publicados em apryse.com, e marketplaces de terceiros (Vendr, G2) relatam cotações iniciais a partir de aproximadamente $1,500/desenvolvedor/ano. Combinado com configuração de caminho do módulo e APIs de herança C++, isso pode criar barreiras para equipes que buscam funcionalidade PDF direta. Este guia fornece um caminho de migração passo a passo do Apryse para o IronPDF— uma biblioteca PDF .NET nativa com convenções modernas de C#, integração mais simples e licenciamento perpétuo único.

Por que migrar do Apryse PDF?

Embora oApryse PDFofereça funcionalidades robustas, diversos fatores levam as equipes de desenvolvimento a buscar alternativas para suas necessidades de geração de PDFs.

Modelo de Preços e Assinatura Premium

Apryse mira clientes empresariais com preços liderados por vendas que podem ser proibitivos para projetos de pequeno a médio porte. Pontos de preços públicos não são publicados em apryse.com; os números abaixo vêm de agregadores de terceiros (Vendr, G2) e devem ser confirmados com vendas Apryse:

AspectoApryse (PDFTron)IronPDF
Nível de entrada~$1,500/desenvolvedor/ano (relatado por Vendr)$999 (pagamento único) (Lite)
Faixa típica~$9,275–$35,816/ano (segundo dados do marketplace Vendr)Dividido em níveis Lite/Plus/Professional
Modelo de LicençaAssinatura anual, cotação liderada por vendasLicença perpétua
Licença de visualizaçãoWebViewer/PDFViewCtrl com preços separadosNão aplicável (use visualizadores padrão)
Licença de servidorPreços para empresas necessáriosIncluído nos níveis de licença

Complexidade da integração

A herança C++ do Apryse molda a superfície .NET, o que pode adicionar etapas de configuração em relação a um pacote apenas gerenciado:

RecursoApryse PDFIronPDF
ConfigurarCaminhos de módulos, binários externosPacote NuGet único
InicializaçãoPDFNet.Initialize() com licençaCessão simples de propriedade
Renderização HTMLÉ necessário um módulo html2pdf externo.Motor Chromium integrado
Estilo APIHerança do C++, complexoConvenções modernas de C#
DependênciasMúltiplas DLLs, específicas da plataformaEmbalagem autossuficiente

Quando considerar a migração

Migre para o IronPDF se: Você precisa principalmente de conversão de HTML/URL para PDF. Você deseja uma API mais simples com menos código repetitivo. O preço premium não se justifica para o seu caso de uso.

  • Você não precisa dos controles do visualizador PDFViewCtrl
  • Você prefere licenciamento único em vez de assinaturas?

Continue usando oApryse PDFse:

  • Você precisa dos controles de visualização nativos deles (PDFViewCtrl)
  • Você utiliza extensivamente formatos XOD ou proprietários.
  • Você precisa de funcionalidades específicas para empresas (redação avançada, etc.)
  • Sua organização já possui licenças corporativas.

Preparação pré-migratória

Pré-requisitos

Certifique-se de que seu ambiente atenda a estes requisitos:

  • .NET Framework 4.6.2+, .NET Core 3.1+, or .NET 5/6/7/8/9
  • Visual Studio 2019 ou superior ou VS Code com extensão C#
  • Acesso ao Gerenciador de Pacotes NuGet
  • Chave de licença do IronPDF(teste gratuito disponível em IronPDF )

Auditoria de uso do Apryse PDF

Execute estes comandos no diretório da sua solução para identificar todas as referências ao Apryse:

# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .

# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .

# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .

# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .

# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .
SHELL

Mudanças significativas a serem previstas

Padrão PDF ApryseAlteração necessária
PDFNet.Initialize()Substitua por IronPdf.License.LicenseKey
módulo HTML2PDFChromePdfRenderer embutido
ElementWriterO IronPDF gerencia o conteúdo internamente.
SDFDoc.SaveOptionsMétodo simples SaveAs()
PDFViewCtrlUtilize visualizadores de PDF externos.
Formato XODConverter para PDF ou imagens
Configuração do caminho do móduloNão é necessário

Processo de migração passo a passo

Passo 1: Atualizar pacotes NuGet

Apryse publica o SDK .NET sob vários IDs de pacote PDFTron.* dependendo da estrutura de destino e arquitetura (a marca mudou em 2023, mas os IDs dos pacotes não). Alguns comuns:

  • PDFTron.NET.x64 — pacote principal .NET / .NET Core x64 (atual 11.x)
  • PDFTron.NetFramework.x64 — apenas .NET Framework 4.5.1+ x64
  • PDFTron.NETCore.Windows.x64 — .NET Core on Windows x64
  • PDFNet — pacote legado combinado Windows .NET Framework 32/64 bits
# Remove whichever Apryse/PDFTron package(s) you have installed
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NetFramework.x64
dotnet remove package PDFTron.NETCore.Windows.x64
dotnet remove package PDFNet

# Install IronPDF
dotnet add package IronPdf
SHELL

Ou através do Console do Gerenciador de Pacotes:

Uninstall-Package PDFTron.NET.x64
Install-Package IronPdf
PowerShell

Etapa 2: Atualizar referências de namespace

Substitua os namespaces do Apryse pelo IronPDF:

// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;

// Add these
using IronPdf;
using IronPdf.Rendering;

Etapa 3: Remover o código padrão de inicialização

OApryse PDFrequer uma inicialização complexa. O IronPDF elimina isso completamente.

Implementação do Apryse PDF:

// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...

Implementação do IronPDF:

// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

Nenhuma chamada PDFNet.Terminate() é necessária com IronPDF—os recursos são gerenciados automaticamente.

Referência completa para migração de API

Mapeamento de Classes Principais

Classe Apryse PDFEquivalente ao IronPDF
PDFDocPdfDocument
HTML2PDFChromePdfRenderer
TextExtractorPdfDocument.ExtractAllText()
StamperPdfDocument.ApplyWatermark()
PDFDrawPdfDocument.ToBitmap()
SecurityHandlerPdfDocument.SecuritySettings
PDFNetIronPdf.License

Operações de Documentos

MétodoApryse PDFMétodo IronPDF
new PDFDoc()new PdfDocument()
new PDFDoc(path)PdfDocument.FromFile(path)
new PDFDoc(buffer)PdfDocument.FromBinaryData(bytes)
doc.Save(path, options)pdf.SaveAs(path)
doc.Save(buffer)pdf.BinaryData
doc.Close()pdf.Dispose()
doc.GetPageCount()pdf.PageCount
doc.AppendPages(doc2, start, end)PdfDocument.Merge(pdfs)

Conversão de HTML para PDF

MétodoApryse PDFMétodo IronPDF
HTML2PDF.Convert(doc)renderer.RenderHtmlAsPdf(html)
converter.InsertFromURL(url)renderer.RenderUrlAsPdf(url)
converter.InsertFromHtmlString(html)renderer.RenderHtmlAsPdf(html)
converter.SetModulePath(path)Não é necessário
converter.SetPaperSize(width, height)RenderingOptions.PaperSize
converter.SetLandscape(true)RenderingOptions.PaperOrientation

Exemplos de migração de código

String HTML para PDF

A operação mais comum demonstra a redução drástica no código repetitivo.

Implementação do Apryse PDF:

using pdftron;
using pdftron.PDF;

class Program
{
    static void Main()
    {
        PDFNet.Initialize("YOUR_LICENSE_KEY");
        PDFNet.SetResourcesPath("path/to/resources");

        string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";

        using (PDFDoc doc = new PDFDoc())
        {
            HTML2PDF converter = new HTML2PDF();
            converter.SetModulePath("path/to/html2pdf");
            converter.InsertFromHtmlString(html);

            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            if (converter.Convert(doc))
            {
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine("PDF created successfully");
            }
            else
            {
                Console.WriteLine($"Conversion failed: {converter.GetLog()}");
            }
        }

        PDFNet.Terminate();
    }
}

Implementação do IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        
        pdf.SaveAs("output.pdf");
    }
}

O IronPDF elimina a inicialização, os caminhos dos módulos e o código de limpeza, reduzindo mais de 35 linhas para apenas 5 linhas.

Conversão de URL para PDF

Implementação do Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc())
{
    HTML2PDF converter = new HTML2PDF();
    converter.SetModulePath("path/to/html2pdf");

    HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
    settings.SetLoadImages(true);
    settings.SetAllowJavaScript(true);
    settings.SetPrintBackground(true);

    converter.InsertFromURL("https://example.com", settings);

    if (converter.Convert(doc))
    {
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
    }
}

PDFNet.Terminate();

Implementação do IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        string url = "https://www.example.com";
        var pdf = renderer.RenderUrlAsPdf(url);
        
        pdf.SaveAs("webpage.pdf");
    }
}

Unir vários PDFs

Implementação do Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc mainDoc = new PDFDoc())
{
    string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };

    foreach (string file in files)
    {
        using (PDFDoc doc = new PDFDoc(file))
        {
            mainDoc.AppendPages(doc, 1, doc.GetPageCount());
        }
    }

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

Implementação do IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        
        var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
        
        merged.SaveAs("merged.pdf");
    }
}

O método estático Merge do IronPDF aceita múltiplos documentos diretamente, eliminando o padrão de iteração de páginas.

Extração de texto

Implementação do Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    TextExtractor extractor = new TextExtractor();

    for (int i = 1; i <= doc.GetPageCount(); i++)
    {
        Page page = doc.GetPage(i);
        extractor.Begin(page);

        string pageText = extractor.GetAsText();
        Console.WriteLine($"Page {i}:");
        Console.WriteLine(pageText);
    }
}

PDFNet.Terminate();

Implementação do IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");

Adicionando marcas d'água

Implementação do Apryse PDF:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
                         Stamper.VerticalAlignment.e_vertical_center);
    stamper.SetOpacity(0.3);
    stamper.SetRotation(45);
    stamper.SetFontColor(new ColorPt(1, 0, 0));
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);

    stamper.StampText(doc, "CONFIDENTIAL",
        new PageSet(1, doc.GetPageCount()));

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

Implementação do IronPDF:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

O IronPDF utiliza marcas d'água baseadas em HTML/CSS , proporcionando controle total sobre o estilo através de tecnologias web já conhecidas.

Proteção por senha

Implementação do Apryse PDF:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    SecurityHandler handler = new SecurityHandler();
    handler.ChangeUserPassword("user123");
    handler.ChangeMasterPassword("owner456");

    handler.SetPermission(SecurityHandler.Permission.e_print, false);
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);

    doc.SetSecurityHandler(handler);
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

Implementação do IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");

Cabeçalhos e rodapés

Implementação do IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");

O IronPDF suporta tokens de placeholder como {page} e {total-pages} para numeração de páginas dinâmica. Para mais opções, consulte a documentação sobre cabeçalhos e rodapés .

Integração com ASP.NET Core

Os requisitos de inicialização doApryse PDFcomplicam a integração com aplicações web. O IronPDF simplifica esse padrão.

Padrão IronPDF:

[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
    [HttpGet("generate")]
    public IActionResult GeneratePdf()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }

    [HttpGet("generate-async")]
    public async Task<IActionResult> GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");

        return File(pdf.BinaryData, "application/pdf", "report.pdf");
    }
}

Configuração de Injeção de Dependência

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();

    // Or create a wrapper service
    services.AddScoped<IPdfService, IronPdfService>();
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
    }

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}

Comparação de desempenho

MétricaApryse PDFIronPDF
Partida a frioRápido (código nativo)~2s (Inicialização do Chromium)
Renderizações subsequentesRápidoRápido
HTML complexoVariável (módulo html2pdf)Excelente (Cromo)
Suporte a CSSLimitadoCSS3 completo
JavaScriptLimitadoApoiado

Dicas de Otimização de Desempenho

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}

Solução de problemas comuns de migração

Problema: Erros no caminho do módulo

Remova toda a configuração do caminho do módulo — o mecanismo Chromium do IronPDF já está integrado:

// Remove this
converter.SetModulePath("path/to/html2pdf");

// Just use the renderer
var renderer = new ChromePdfRenderer();

Problema: PDFNet.Initialize() não encontrado

Substitua pela configuração de licença do IronPDF:

// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";

Problema: Substituição do PDFViewCtrl

O IronPDF não inclui controles de visualização. Opções:

  • Use PDF.js para visualizadores da web
  • Utilize os visualizadores de PDF do sistema.
  • Considere componentes de visualização de terceiros

Lista de verificação pós-migração

Após concluir a migração do código, verifique o seguinte:

  • Verificar se a qualidade do PDF gerado corresponde às expectativas.
  • Testar todos os casos extremos (documentos grandes, CSS complexo)
  • Comparar métricas de desempenho
  • Atualize as configurações do Docker, se aplicável.
  • Remover a licença do Apryse e as configurações relacionadas
  • Documente quaisquer configurações específicas do IronPDF
  • Treinar a equipe em novos padrões de API
  • Atualizar os pipelines de CI/CD, se necessário.

Recursos adicionais


A migração doApryse PDFpara o IronPDF transforma sua base de código PDF de padrões complexos em C++ para C# idiomático. A eliminação do código repetitivo de inicialização, da configuração do caminho do módulo e do licenciamento baseado em assinatura proporciona ganhos de produtividade imediatos, ao mesmo tempo que reduz os custos a longo prazo.

  • [{i:(Apryse é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pela Apryse ou PDFTron. 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.