Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

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 :

  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 implementação requer uma licença separada (a partir de US$ 495).

  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

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

  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
# 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";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

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" .
SHELL

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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 = true
  • prince.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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
}
$vbLabelText   $csharpLabel

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>
HTML
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>{html-title}</div>"
};
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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 Prince por ChromePdfRenderer Substitua prince.Convert() por RenderHtmlFileAsPdf() ou RenderHtmlAsPdf()
  • 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

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 ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim