IRONSOFTWAREHOME
VÍDEOS

Como renderizar uma string HTML em PDF usando C#

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

A migração do PríncipeXML para o IronPDF transforma seu fluxo de trabalho de geração de PDFs, passando de um processo externo de linha de comando para uma biblioteca .NET nativa. Este guia fornece um caminho de migração completo, passo a passo, que elimina a sobrecarga de gerenciamento de processos, simplifica a implementação e oferece amplas capacidades de manipulação de PDFs além da geração.

Por que migrar do PríncipeXML para o IronPDF?

Entendendo o PrinceXML

O PríncipeXML é uma ferramenta sofisticada projetada para se destacar na conversão de conteúdo HTML em documentos PDF perfeitos para impressão, graças ao seu suporte dedicado às especificações de mídia paginada CSS. Essa especialização permite que o PríncipeXML renderize documentos com alta fidelidade aos designs de impressão pretendidos — um atributo valioso para setores que exigem um estilo de impressão detalhado, como editoração ou documentação jurídica.

No entanto, o PríncipeXML não é uma biblioteca .NET e funciona como uma ferramenta de linha de comando separada, o que pode complicar a integração em ambientes que preferem soluções puramente .NET . A dependência de um processo de servidor separado implica em gerenciamento adicional de recursos do sistema e pode aumentar a complexidade das implantações de projetos.

O Problema do Processo Externo

O PríncipeXML opera como um executável de linha de comando separado, o que cria desafios arquitetônicos significativos para aplicativos .NET :

  1. Sobrecarga de gerenciamento de processos: É necessário iniciar, monitorar e encerrar processos externos.

  2. Sem integração nativa com .NET : comunicação via stdin/stdout ou arquivos temporários.

  3. Complexidade de implantação: Requer a instalação do Prince em todos os servidores.

  4. Licenciamento por Servidor: Cada implantação precisa de uma licença separada.

  5. Dificuldade no tratamento de erros: Analisar a saída de texto para detecção de erros.

  6. Sem Async/Await: Chamadas bloqueantes ou wrappers assíncronos complexos são necessários.

  7. Dependências de caminho: O executável do Prince deve estar localizado no PATH ou em um caminho absoluto.

Comparação entre PríncipeXML e IronPDF

AspectoPríncipeXMLIronPDF
ArquiteturaProcesso externoBiblioteca .NET nativa
IntegraçãoLinha de comandoAPI direta
ImplantaçãoInstale em todos os servidores.Pacote NuGet único
Tratamento de errosAnalisar saída de textoExceções do .NET
Suporte assíncronoEnvoltórios manuaisassíncrono/await nativo
Manipulação de PDFSomente geraçãoManipulação completa (mesclar, dividir, editar)
LicenciamentoDesktop $495 / Servidor $3.800; free non-commercial use with logo watermarkPor desenvolvedor
AtualizaçõesReinstalação manualAtualização do NuGet
DepuraçãoDifícilSuporte completo ao depurador
Assinaturas digitaisNãoSim
FormuláriosNãoSim
Suporte ao DockerComplexoSimples
Funções na nuvemDifícilFácil

O IronPDF oferece uma alternativa com seus recursos nativos do .NET , que vão além da simples conversão de HTML para PDF, incluindo tarefas avançadas de manipulação de PDF, como edição, mesclagem e assinaturas digitais. A API do IronPDF foi projetada para ser simples e fácil de usar, permitindo que os desenvolvedores realizem conversões e manipulações com o mínimo de código repetitivo.

Para equipes que adotam o moderno .NET, o IronPDF facilita a implantação sem dependências externas ou processos de servidor e, assim, alivia o fardo da integração na estrutura .NET.


Antes de começar

Pré-requisitos

  1. Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
  3. Licença do IronPDF: Obtenha sua chave de licença em IronPDF

Alterações no pacote NuGet

# Install IronPDF
dotnet add package IronPdf

# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
SHELL

Configuração de licença

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Pesquisar por Uso do PrinceXML

# Find Prince process calls
grep -r "prince" --include="*.cs" .
grep -r "Process.Start" --include="*.cs" . | grep -i prince
grep -r "@page" --include="*.css" .
grep -r "prince-" --include="*.css" .
SHELL

Referência completa da API

Alterações de namespace

// Before: PrinceXML
using PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;

// After: IronPDF
using IronPdf;

Mapeamento de linha de comando para método

Comando do PríncipeEquivalente ao IronPDF
prince input.html -o output.pdfrenderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf")
prince --style=custom.css input.htmlIncluir CSS no HTML ou usar RenderingOptions
prince --javascriptrenderer.RenderingOptions.EnableJavaScript = true
prince --no-javascriptrenderer.RenderingOptions.EnableJavaScript = false
prince --page-size=Letterrenderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
prince --page-margin=1inrenderer.RenderingOptions.MarginTop = 72 (72 pontos = 1 polegada)
prince --encryptpdf.SecuritySettings.OwnerPassword = "..."
prince --user-password=pwpdf.SecuritySettings.UserPassword = "pw"
prince --disallow-printpdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
prince --disallow-copypdf.SecuritySettings.AllowUserCopyPasteContent = false
prince --baseurl=http://...renderer.RenderingOptions.BaseUrl = new Uri("http://...")
prince --media=printrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
prince --media=screenrenderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen

Mapeamento de CSS @page para RenderingOptions

Propriedade CSS @pageEquivalente ao IronPDF
size: A4PaperSize = PdfPaperSize.A4
size: LetterPaperSize = PdfPaperSize.Letter
size:A4landscapePaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape
margin: 2cmMarginTop/Bottom/Left/Right = 56
margin-top: 1inMarginTop = 72
@top-center { content: "..." }HtmlHeader com div centralizado
@bottom-right { content: counter(page) }HtmlFooter com placeholder {page}

Conversões de tamanho de página

TamanhoPontosmilímetros
Carta612 x 792216 x 279
A4595 x 842210 x 297
Jurídico612 x 1008216 x 356
1 polegada7225.4
1 cm28.3510

Exemplos de migração de código

Exemplo 1: Conversão de arquivo HTML para PDF

Antes (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.Convert("input.html", "output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Após (IronPDF):

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

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

Este exemplo demonstra a diferença arquitetônica fundamental. PríncipeXML requer instanciar um objeto Prince com o caminho completo para o executável ("C:\\Program Files\\Prince\\engine\\bin\\prince.exe"), e então chamar Convert() com os caminhos de entrada e saída.

IronPDF elimina totalmente as dependências de caminho: crie um ChromePdfRenderer, chame RenderHtmlFileAsPdf() com o caminho do arquivo HTML, e SaveAs() para escrever o resultado. Sem caminhos executáveis, sem gerenciamento de processos, sem dependências de caminho. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.

Exemplo 2: Conversão de URL para PDF com opções

Antes (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        prince.JavaScript = true;
        prince.Encrypt = true;
        prince.PdfTitle = "Website Export";
        prince.Convert("https://example.com", "webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}

Após (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.Title = "Website Export";

        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SecuritySettings.OwnerPassword = "owner-password";
        pdf.SecuritySettings.UserPassword = "user-password";
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("URL converted to PDF");
    }
}

Este exemplo mostra como as opções do PríncipeXML são mapeadas para as propriedades do IronPDF. PríncipeXML expõe a configuração como propriedades no objeto Prince (JavaScript, Encrypt, PdfTitle) antes da conversão.IronPDF usa propriedades RenderingOptions para configurações de pré-renderização, e aplica criptografia pós-renderização via SecuritySettings no PdfDocument.

Mapeamentos de teclas:

  • prince.JavaScript = truerenderer.RenderingOptions.EnableJavaScript = true
  • prince.PdfTitle = "..."renderer.RenderingOptions.Title = "..."
  • prince.Encrypt = truepdf.SecuritySettings.OwnerPassword = "..." / pdf.SecuritySettings.UserPassword = "..."

Saiba mais em nossos tutoriais .

Exemplo 3: Conversão de string HTML para PDF

Antes (PrinceXML):

// NuGet: Install-Package PrinceXMLWrapper
using PrinceXML.Wrapper;
using System;

class Program
{
    static void Main()
    {
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
        // ConvertString accepts a raw HTML/XML string directly
        prince.ConvertString(html, "styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}

Após (IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
        string html = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("styled-output.pdf");
        Console.WriteLine("Styled PDF created");
    }
}

Ambas as bibliotecas aceitam uma string HTML diretamente: PríncipeXML via ConvertString() e IronPDF via RenderHtmlAsPdf(). A diferença arquitetônica permanece — o ConvertString do PríncipeXML ainda passa a entrada para o binário externo prince nos bastidores, enquanto IronPDF realiza a renderização em processo sem executável externo.


Migrando mídia paginada CSS

Embora o suporte a mídia paginada CSS do PríncipeXML seja poderoso, ele cria dependência de fornecedor com CSS específico do Prince que não funcionará em outros lugares:

CSS PrinceXML:

@page {
    size: A4;
    margin: 2cm;
    @top-center {
        content: "Document Title";
    }
    @bottom-right {
        content: counter(page);
    }
}

/* Prince-specific extensions */
prince-pdf-page-label: "Chapter " counter(chapter);
prince-pdf-destination: attr(id);
Text

IronPDF C# (equivalente):

renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 56;    // ~2cm
renderer.RenderingOptions.MarginBottom = 56;
renderer.RenderingOptions.MarginLeft = 56;
renderer.RenderingOptions.MarginRight = 56;

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
    MaxHeight = 40
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

Problemas comuns na migração de CSS

Problema 1: CSS @page não funciona

O IronPDF usa o Chromium, que tem suporte limitado a @page. Converter regras CSS em RenderingOptions.

Problema 2: Margens de página ausentes

Caixas de margem CSS (@top-center, @bottom-right) são específicas do Prince. Use HtmlFooter em vez disso.

Problema 3: string-set/content não funciona

A propriedade CSS string-set é específica do Prince. Use o placeholder {html-title} da tag <title>:

<title>Chapter 1: Introduction</title>
HTML
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};

Problema 4: contador(páginas) Incorreto

Use o placeholder {total-pages} do IronPDF em vez de contadores CSS.


Comparação de desempenho

OperaçãoPríncipeXMLIronPDF
HTML simples~400ms~300ms
CSS complexo~600ms~400ms
PáginasJavaScriptLimitado~500ms
Documentos grandes~1500ms~1000ms
Concorrente (10)~4000ms~1500ms
Custo inicial~200ms~50ms

Novas funcionalidades após a migração

Após migrar para o IronPDF, você obtém recursos que o PríncipeXML não pode fornecer:

Fusão de PDFs

var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");

Marcas d'água

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");

Assinaturas digitais

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);

Preenchimento de formulários

var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");

Resumo da comparação de recursos

RecursoPríncipeXMLIronPDF
.NET nativoNãoSim
Processo externoObrigatórioNão
Suporte assíncronoEnrolamento manualassíncrono/await nativo
Mídia paginada CSSApoiadoPor meio de opções de renderização
Grade CSSSimSim
FlexboxSimSim
JavaScriptLimitadoES2024 completo
GeraçãoSimSim
FusãoNãoSim
DividirNãoSim
EditarNãoSim
Marcas d'águaSomente CSSHTML/CSS + API
Assinaturas digitaisNãoSim
PDF/ASimSim
CriptografiaSimSim
FormuláriosNãoSim
Pacote NuGetNãoSim
Instalação do servidorObrigatórioNão

Lista de verificação para migração

Pré-migração

  • Identificar todas as invocações da linha de comando do Prince
  • Documente as regras CSS @page utilizadas.
  • Liste propriedades CSS específicas do Prince (prince-*, string-set)
  • Observe quaisquer funçõesJavaScriptdo Prince
  • Identificar as funcionalidades do PDF utilizadas (criptografia, metadados)
  • Obtenha a chave de licença do IronPDF em IronPDF

Alterações no código

  • Remova o pacote NuGet PrinceXMLWrapper
  • Instale o pacote NuGet IronPdf
  • Atualizar importações de namespace
  • Substitua a instância Prince por ChromePdfRenderer
  • Substitua prince.Convert() por RenderHtmlFileAsPdf() ou RenderHtmlAsPdf()
  • Converta métodos setter para propriedades RenderingOptions
  • Migre CSS @page para RenderingOptions
  • Substitua caixas de margem por HtmlFooter
  • Converta contadores CSS para placeholders {total-pages}
  • Remover o tratamento de arquivos temporários para strings HTML
  • Adicionar inicialização de licença na inicialização do aplicativo

Pós-migração

  • Teste de conversão de arquivo HTML
  • Teste de conversão de string HTML
  • Teste de conversão de URL
  • Verifique se os tamanhos das páginas correspondem
  • Verifique se as margens correspondem
  • Testar cabeçalhos e rodapés
  • Verificar números de página
  • Testar criptografia/segurança
  • Remover a instalação do Prince dos servidores
  • Atualizar scripts de implantação

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