Como migrar do PrinceXML para o IronPDF em C#
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 :
-
Sobrecarga de gerenciamento de processos: É necessário iniciar, monitorar e encerrar processos externos.
-
Sem integração nativa com .NET : comunicação via stdin/stdout ou arquivos temporários.
-
Complexidade de implantação: Requer a instalação do Prince em todos os servidores.
-
Licenciamento por Servidor: Cada implantação precisa de uma licença separada.
-
Dificuldade no tratamento de erros: Analisar a saída de texto para detecção de erros.
-
Sem Async/Await: Chamadas bloqueantes ou wrappers assíncronos complexos são necessários.
- 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
| Aspecto | PríncipeXML | IronPDF |
|---|---|---|
| Arquitetura | Processo externo | Biblioteca .NET nativa |
| Integração | Linha de comando | API direta |
| Implantação | Instale em todos os servidores. | Pacote NuGet único |
| Tratamento de erros | Analisar saída de texto | Exceções do .NET |
| Suporte assíncrono | Envoltórios manuais | assíncrono/await nativo |
| Manipulação de PDF | Somente geração | Manipulação completa (mesclar, dividir, editar) |
| Licenciamento | Desktop $495 / Servidor $3.800; free non-commercial use with logo watermark | Por desenvolvedor |
| Atualizações | Reinstalação manual | Atualização do NuGet |
| Depuração | Difícil | Suporte completo ao depurador |
| Assinaturas digitais | Não | Sim |
| Formulários | Não | Sim |
| Suporte ao Docker | Complexo | Simples |
| Funções na nuvem | Difícil | Fá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
- Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
- 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
# Install IronPDF
dotnet add package IronPdf
# Remove Prince wrapper if using one
dotnet remove package PrinceXMLWrapper
Configuração de licença
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' 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" .
# 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" .
Referência completa da API
Alterações de namespace
// Before: PrinceXML
using PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
// Before: PrinceXML
using PrinceXML.Wrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
Imports IronPdf
Imports System.Diagnostics
Imports System.IO
Mapeamento de linha de comando para método
| Comando do Príncipe | Equivalente ao IronPDF |
|---|---|
prince input.html -o output.pdf |
renderer.RenderHtmlFileAsPdf("input.html").SaveAs("output.pdf") |
prince --style=custom.css input.html |
Incluir CSS no HTML ou usar RenderingOptions |
prince --javascript |
renderer.RenderingOptions.EnableJavaScript = true |
prince --no-javascript |
renderer.RenderingOptions.EnableJavaScript = false |
prince --page-size=Letter |
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter |
prince --page-margin=1in |
renderer.RenderingOptions.MarginTop = 72 (72 pontos = 1 polegada) |
prince --encrypt |
pdf.SecuritySettings.OwnerPassword = "..." |
prince --user-password=pw |
pdf.SecuritySettings.UserPassword = "pw" |
prince --disallow-print |
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint |
prince --disallow-copy |
pdf.SecuritySettings.AllowUserCopyPasteContent = false |
prince --baseurl=http://... |
renderer.RenderingOptions.BaseUrl = new Uri("http://...") |
prince --media=print |
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print |
prince --media=screen |
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen |
Mapeamento de CSS @page para RenderingOptions
| Propriedade CSS @page | Equivalente ao IronPDF |
|---|---|
size: A4 |
PaperSize = PdfPaperSize.A4 |
size: Letter |
PaperSize = PdfPaperSize.Letter |
size:A4landscape |
PaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape |
margin: 2cm |
MarginTop/Bottom/Left/Right = 56 |
margin-top: 1in |
MarginTop = 72 |
@top-center { content: "..." } |
HtmlHeader com div centralizado |
@bottom-right { content: counter(page) } |
HtmlFooter com placeholder {page} |
Conversões de tamanho de página
| Tamanho | Pontos | milímetros |
|---|---|---|
| Carta | 612 x 792 | 216 x 279 |
| A4 | 595 x 842 | 210 x 297 |
| Jurídico | 612 x 1008 | 216 x 356 |
| 1 polegada | 72 | 25.4 |
| 1 cm | 28.35 | 10 |
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");
}
}
// 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");
}
}
Imports PrinceXML.Wrapper
Imports System
Class Program
Shared Sub Main()
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.Convert("input.html", "output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
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");
}
}
// 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");
}
}
Imports PrinceXML.Wrapper
Imports System
Class Program
Shared Sub Main()
Dim prince As 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")
End Sub
End Class
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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.Title = "Website Export"
Dim 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")
End Sub
End Class
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 = true→renderer.RenderingOptions.EnableJavaScript = trueprince.PdfTitle = "..."→renderer.RenderingOptions.Title = "..."prince.Encrypt = true→pdf.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");
}
}
// 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");
}
}
Imports PrinceXML.Wrapper
Imports System
Module Program
Sub Main()
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
Dim prince As 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")
End Sub
End Module
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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("styled-output.pdf")
Console.WriteLine("Styled PDF created")
End Sub
End Class
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);
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
};
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
};
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 With {
.HtmlFragment = "<div style='text-align:center;'>Document Title</div>",
.MaxHeight = 40
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.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>
<title>Chapter 1: Introduction</title>
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div>{html-title}</div>"
};
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ção | PríncipeXML | IronPDF |
|---|---|---|
| HTML simples | ~400ms | ~300ms |
| CSS complexo | ~600ms | ~400ms |
| PáginasJavaScript | Limitado | ~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");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_book.pdf")
Marcas d'água
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
Assinaturas digitais
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);
Dim 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");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("Name").Value = "John Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.GetFieldByName("Name").Value = "John Doe"
pdf.SaveAs("filled_form.pdf")
Resumo da comparação de recursos
| Recurso | PríncipeXML | IronPDF |
|---|---|---|
| .NET nativo | Não | Sim |
| Processo externo | Obrigatório | Não |
| Suporte assíncrono | Enrolamento manual | assíncrono/await nativo |
| Mídia paginada CSS | Apoiado | Por meio de opções de renderização |
| Grade CSS | Sim | Sim |
| Flexbox | Sim | Sim |
| JavaScript | Limitado | ES2024 completo |
| Geração | Sim | Sim |
| Fusão | Não | Sim |
| Dividir | Não | Sim |
| Editar | Não | Sim |
| Marcas d'água | Somente CSS | HTML/CSS + API |
| Assinaturas digitais | Não | Sim |
| PDF/A | Sim | Sim |
| Criptografia | Sim | Sim |
| Formulários | Não | Sim |
| Pacote NuGet | Não | Sim |
| Instalação do servidor | Obrigatório | Nã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
PrinceporChromePdfRenderer - Substitua
prince.Convert()porRenderHtmlFileAsPdf()ouRenderHtmlAsPdf() - 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

