IRONSOFTWAREHOME
VÍDEOS

Como renderizar um arquivo HTML para PDF em C#

Curtis Chau
Curtis Chau
Updated: 11 de janeiro de 2026

Por que migrar do Aspose.PDF?

Embora o Aspose.PDF ofereça funcionalidades de nível empresarial, diversos fatores levam as equipes de desenvolvimento a buscar alternativas modernas para suas necessidades de geração de PDFs.

Comparação de custos

Aspose.PDF usa um modelo de licença perpétua que inclui um ano de atualizações; a renovação opcional estende a janela de atualizações. Fonte: página de preços da Aspose.

AspectoAspose.PDFIronPDF
Preço Inicial (Pequena Empresa Desenvolvedora)$1.199/desenvolvedor$999 (pagamento único) (Lite)
Modelo de LicençaPerpétua + 1 ano de atualizações; optional renewalLicença perpétua
Developer OEM$3.597/desenvolvedor (implantações ilimitadas)Incluído nos níveis superiores
ApoiarIncluído em todos os níveis pagosIncluído
Avaliação GratuitaLicença temporária de 30 dias (caso contrário, marcas d'água + limites de tamanho)Grátis para desenvolvimento

Comparação de mecanismos de renderização HTML

Aspose.PDF usa um mecanismo de renderização HTML/CSS interno (não Chromium); relatórios de usuários no fórum Aspose observam lacunas com recursos modernos de layout CSS, como Flexbox e CSS Grid. O IronPDF usa uma versão incorporada do Chromium para renderização HTML-to-PDF.

RecursoAspose.PDF (mecanismo interno)IronPDF (Chromium)
Suporte a CSS3Parcial; lacunas em recursos modernos de layoutCSS3 completo
Flexbox/GradeLimitado / inconsistente (segundo relatórios do fórum Aspose)Suporte total
JavaScriptLimitadoSuporte completo (V8 via Chromium)
Fontes da WebParcialCompleto
HTML5 modernoParcialCompleto
Qualidade de renderizaçãoVariável em layouts complexosEquivalente ao Chrome

Características de Desempenho

Usuários relataram diferenças de desempenho no fórum de suporte Aspose. Os números abaixo refletem cenários relatados pela comunidade — verifique em sua própria carga de trabalho.

MétricaAspose.PDFIronPDF
Renderização HTMLDesacelerações relatadas por usuários em cargas de trabalho complexas de CSSMotor Chromium otimizado
Documentos grandesCrescimento de memória relatado em alguns cenáriosStreaming eficiente
Desempenho do LinuxAlto crescimento de CPU e memória relatado no fórum da comunidadeEstável

Aspose.PDF vs. IronPDF: Principais diferenças

AspectoAspose.PDFIronPDF
Preços (entrada)$1.199/desenvolvedor (perpétua + 1 ano de atualizações)$999 (pagamento único) (Lite)
Motor HTMLMecanismo interno (CSS moderno limitado)Chromium (CSS3/JS completo)
DesempenhoDesacelerações relatadas no fórum em CSS complexoOtimizado
Modelo de LicençaPerpétuo + .lic file; renovação opcional para atualizaçõesChave perpétua + baseada em código
Suporte para LinuxRelatos no fórum de problemas de CPU/memóriaEstável
Indexação de páginasBaseado em 1 (Pages[1])Baseado em 0 (Pages[0])

Preparação pré-migratória

Pré-requisitos

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

  • .NET Framework 4.6.2 ou superior ou .NET Core 3.1 / .NET 5-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 Aspose.PDF

Execute estes comandos no diretório da sua solução para identificar todas as referências a Aspose.PDF:

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

# Find HtmlLoadOptions usage
grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" .

# Find Facades usage
grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" .

# Find TextAbsorber usage
grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" .
SHELL

Mudanças significativas a serem previstas

Padrão Aspose.PDFAlteração necessária
new Document() + Pages.Add()Use a renderização HTML em vez disso.
HtmlLoadOptionsChromePdfRenderer.RenderHtmlAsPdf()
TextFragment + posicionamento manualPosicionamento baseado em CSS
PdfFileEditor.Concatenate()PdfDocument.Merge()
TextFragmentAbsorberpdf.ExtractAllText()
ImageStampMarcas d'água baseadas em HTML
Licenciamento de arquivo .licChave de licença baseada em código
indexação de páginas baseada em 1indexação de páginas baseada em 0

Processo de migração passo a passo

Passo 1: Atualizar pacotes NuGet

Remova o Aspose.PDF e instale o IronPDF:

# Remove Aspose.PDF
dotnet remove package Aspose.PDF

# Install IronPDF
dotnet add package IronPdf
SHELL

Ou através do Console do Gerenciador de Pacotes:

Uninstall-Package Aspose.PDF
Install-Package IronPdf
PowerShell

Etapa 2: Atualizar referências de namespace

Substitua os namespaces do Aspose.PDF pelo IronPDF:

// Remove these
using Aspose.Pdf;
using Aspose.Pdf.Text;
using Aspose.Pdf.Facades;
using Aspose.Pdf.Generator;

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

Etapa 3: Atualizar a configuração da licença

O Aspose.PDF utiliza licenciamento por arquivo .lic. O IronPDF utiliza uma chave simples baseada em código.

Implementação do Aspose.PDF:

var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

Implementação do IronPDF:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Referência completa para migração de API

Mapeamento de Classes Principais

Classe Aspose.PDFEquivalente ao IronPDF
DocumentPdfDocument
HtmlLoadOptionsChromePdfRenderer
TextFragmentAbsorberPdfDocument.ExtractAllText()
PdfFileEditorPdfDocument.Merge()
TextStamp / ImageStampPdfDocument.ApplyWatermark()
LicenseIronPdf.License

Operações de Documentos

Método Aspose.PDFMétodo IronPDF
new Document()new PdfDocument()
new Document(path)PdfDocument.FromFile(path)
doc.Save(path)pdf.SaveAs(path)
doc.Pages.Countpdf.PageCount
doc.Pages.Delete(index)pdf.RemovePages(index)

Conversão de HTML para PDF

Método Aspose.PDFMétodo IronPDF
new HtmlLoadOptions()new ChromePdfRenderer()
new Document(stream, htmlOptions)renderer.RenderHtmlAsPdf(html)
new Document(path, htmlOptions)renderer.RenderHtmlFileAsPdf(path)

Exemplos de migração de código

String HTML para PDF

A operação mais comum do Aspose.PDF demonstra a diferença fundamental de abordagem: o Aspose.PDF exige que o HTML seja encapsulado em um MemoryStream, enquanto o IronPDF aceita strings diretamente.

Implementação do Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent)))
        {
            var htmlLoadOptions = new HtmlLoadOptions();
            var document = new Document(stream, htmlLoadOptions);
            document.Save("output.pdf");
        }
        
        Console.WriteLine("PDF created from HTML string");
    }
}

Implementação do IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created from HTML string");
    }
}

O IronPDF elimina completamente o wrapper MemoryStream, resultando em uma API mais limpa e intuitiva.

Arquivo HTML para PDF

Implementação do Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var htmlLoadOptions = new HtmlLoadOptions();
        var document = new Document("input.html", htmlLoadOptions);
        document.Save("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Implementação do IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Unir vários PDFs

O Aspose.PDF exige que você percorra as páginas manualmente.IronPDF fornece um método Merge estático.

Implementação do Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var document1 = new Document("file1.pdf");
        var document2 = new Document("file2.pdf");
        
        foreach (Page page in document2.Pages)
        {
            document1.Pages.Add(page);
        }
        
        document1.Save("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}

Implementação do IronPDF:

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

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");
        
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully");
    }
}

Extração de texto

Implementação do Aspose.PDF:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");
var absorber = new TextAbsorber();

foreach (Page page in document.Pages)
{
    page.Accept(absorber);
}

string extractedText = absorber.Text;
Console.WriteLine(extractedText);

Implementação do IronPDF:

using IronPdf;

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

// Extract all text - one line!
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Or extract from specific page
string page1Text = pdf.ExtractTextFromPage(0);

O IronPDF simplifica a extração de texto, reduzindo-a de várias etapas para uma única chamada de método.

Adicionando marcas d'água

Implementação do Aspose.PDF:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");

var textStamp = new TextStamp("CONFIDENTIAL");
textStamp.Background = true;
textStamp.XIndent = 100;
textStamp.YIndent = 100;
textStamp.Rotate = Rotation.on45;
textStamp.Opacity = 0.5;
textStamp.TextState.Font = FontRepository.FindFont("Arial");
textStamp.TextState.FontSize = 72;
textStamp.TextState.ForegroundColor = Color.Red;

foreach (Page page in document.Pages)
{
    page.AddStamp(textStamp);
}

document.Save("watermarked.pdf");

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.5;
    font-family: Arial;
    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 Aspose.PDF:

using Aspose.Pdf;

var document = new Document("document.pdf");
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256);
document.Save("protected.pdf");

Implementação do IronPDF:

using IronPdf;

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

// Set passwords
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";

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

pdf.SaveAs("protected.pdf");

O IronPDF oferece controle granular sobre as permissões por meio de propriedades fortemente tipadas. Para mais opções, consulte a documentação de criptografia .

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-family:Arial; font-size:12px;'>
            Company Header
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

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

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

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

Notas críticas sobre migração

Alteração na indexação da página

O Aspose.PDF utiliza indexação baseada em 1. O IronPDF utiliza indexação baseada em zero:

// Aspose.PDF - 1-based indexing
var firstPage = doc.Pages[1];  // First page
var thirdPage = doc.Pages[3];  // Third page

//IronPDF- 0-based indexing
var firstPage = pdf.Pages[0];  // First page
var thirdPage = pdf.Pages[2];  // Third page

Arquivo de licença para chave de código

Substitua o licenciamento de arquivo .lic por ativação baseada em código:

// Aspose.PDF
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

// IronPDF
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable
IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY");

Integração com ASP.NET Core

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

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: HtmlLoadOptions não encontrado

Substitua por ChromePdfRenderer:

// Remove this
var doc = new Document(stream, new HtmlLoadOptions());

// Use this
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);

Problema: Absorvedor de Fragmentos de Texto Não Encontrado

Utilizar extração direta de texto:

// Remove this
var absorber = new TextFragmentAbsorber();
page.Accept(absorber);
string text = absorber.Text;

// Use this
var pdf = PdfDocument.FromFile("doc.pdf");
string text = pdf.ExtractAllText();

Problema: PdfFileEditor.Concatenate não disponível

Use PdfDocument.Merge():

// Remove this
var editor = new PdfFileEditor();
editor.Concatenate(files, output);

// Use this
var pdfs = files.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs(output);

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

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

  • Remover arquivos de licença do Aspose.PDF (.lic)
  • Verificar a qualidade da renderização HTML (CSS Grid e Flexbox agora devem funcionar corretamente)
  • Testar casos extremos com documentos grandes e CSS complexo.
  • Atualizar referências do índice da página (baseado em 1 para baseado em 0)
  • Atualize as configurações do Docker, se aplicável.
  • Atualizar pipelines de CI/CD com a nova configuração de chave de licença
  • Documente novos padrões para sua equipe

Recursos adicionais


Migrar de Aspose.PDF para IronPDF move sua base de código de um mecanismo HTML interno para renderização baseada em Chromium. A eliminação dos wrappers MemoryStream, a simplificação da extração de texto e o suporte mais amplo ao CSS3 proporcionam ganhos imediatos de produtividade, e a chave baseada em código do IronPDF substitui o manuseio de arquivos .lic.

Observe: Aspose é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pela Aspose Pty 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.