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 implementação requer uma licença separada (a partir de US$ 495).
-
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 | Por servidor (a partir de US$ 495) | 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 planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, a implantação perfeita do IronPDF não requer dependências externas ou processos de servidor, facilitando assim a integração com a .NET Framework.
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 PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
// Before: PrinceXML
using PrinceXMLWrapper;
using System.Diagnostics;
using System.IO;
// After: IronPDF
using IronPdf;
' Before: PrinceXML
Imports PrinceXMLWrapper
Imports System.Diagnostics
Imports System.IO
' After: IronPDF
Imports IronPdf
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 |
Inclua CSS no HTML ou use 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: A4 landscape |
PaperSize = PdfPaperSize.A4 + PaperOrientation = Landscape |
margin: 2cm |
MarginTop/Bottom/Left/Right = 56 |
margin-top: 1in |
MarginTop = 72 |
@top-center { content: "..." } |
HtmlHeader com div centralizada |
@bottom-right { content: counter(page) } |
HtmlFooter com {page} espaço reservado |
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 PrinceXMLWrapper;
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 PrinceXMLWrapper;
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 PrinceXMLWrapper
Imports System
Module Program
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 Module
Após (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");
}
}
// 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");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
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 a instanciação de um objeto Prince com o caminho completo para o executável ("C:\\Program Files\\Prince\\engine\\bin\\prince.exe"), e então a chamada de Convert() com os caminhos de entrada e saída.
IronPDF elimina completamente 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 PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.SetJavaScript(true);
prince.SetEncrypt(true);
prince.SetPDFTitle("Website Export");
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
class Program
{
static void Main()
{
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.SetJavaScript(true);
prince.SetEncrypt(true);
prince.SetPDFTitle("Website Export");
prince.Convert("https://example.com", "webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports PrinceXMLWrapper
Imports System
Class Program
Shared Sub Main()
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.SetJavaScript(True)
prince.SetEncrypt(True)
prince.SetPDFTitle("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()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.PdfTitle = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.Encrypt("password");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.PdfTitle = "Website Export";
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.Encrypt("password");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("URL converted to PDF");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.PdfTitle = "Website Export"
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.Encrypt("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 usa métodos setter (SetJavaScript(), SetEncrypt(), SetPDFTitle()) antes da conversão. O IronPDF usa propriedades RenderingOptions para configurações de pré-renderização e métodos de pós-renderização como Encrypt() no objeto PdfDocument.
Mapeamentos de teclas:
prince.SetJavaScript(true)→renderer.RenderingOptions.EnableJavaScript = trueprince.SetPDFTitle("...")→renderer.RenderingOptions.PdfTitle = "..."prince.SetEncrypt(true)→pdf.Encrypt("password")(O IronPDF requer uma senha)
Saiba mais em nossos tutoriais .
Exemplo 3: Conversão de string HTML para PDF
Antes (PrinceXML):
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
using System.IO;
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>";
File.WriteAllText("temp.html", html);
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("temp.html", "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
// NuGet: Install-Package PrinceXMLWrapper
using PrinceXMLWrapper;
using System;
using System.IO;
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>";
File.WriteAllText("temp.html", html);
Prince prince = new Prince("C:\\Program Files\\Prince\\engine\\bin\\prince.exe");
prince.Convert("temp.html", "styled-output.pdf");
Console.WriteLine("Styled PDF created");
}
}
Imports PrinceXMLWrapper
Imports System
Imports System.IO
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>"
File.WriteAllText("temp.html", html)
Dim prince As New Prince("C:\Program Files\Prince\engine\bin\prince.exe")
prince.Convert("temp.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()
{
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()
{
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()
Dim html As String = "<html><head><style>body { font-family: Arial; color: blue; }</style></head><body><h1>Hello World</h1></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("styled-output.pdf")
Console.WriteLine("Styled PDF created")
End Sub
End Class
Este exemplo destaca uma diferença crucial: o PríncipeXML requer entrada de arquivo, portanto você deve criar um arquivo temporário (File.WriteAllText("temp.html", html)) antes da conversão. O RenderHtmlAsPdf() do IronPDF aceita strings HTML diretamente — sem arquivos temporários, sem código de limpeza, sem sobrecarga de E/S de disco.
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
As 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 marcador {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 marcador de posição {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áginas JavaScript | 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.
- Listar propriedades CSS específicas do Prince (
prince-*,string-set) - Observe quaisquer funções JavaScript do Prince
- Identificar as funcionalidades do PDF utilizadas (criptografia, metadados)
- Obtenha a chave de licença do IronPDF em IronPDF
Alterações no código
- Remover o pacote NuGet
PrinceXMLWrapper - Instale o pacote NuGet
IronPdf - Atualizar importações de namespace
- Substitua a instanciação
PrinceporChromePdfRendererSubstituaprince.Convert()porRenderHtmlFileAsPdf()ouRenderHtmlAsPdf() - Converter métodos setter em propriedades
RenderingOptions - Migrar CSS da página @page para
RenderingOptions - Substitua as caixas de margem por
HtmlFooter - Converter contadores CSS em marcadores de posição
{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

