Como migrar do PDFreactor para o IronPDF em C#
A migração do PDFreactor para o IronPDF elimina as dependências do Java e a infraestrutura de servidor, ao mesmo tempo que oferece recursos equivalentes de conversão de HTML para PDF por meio de uma biblioteca .NET nativa. Este guia fornece um caminho de migração completo, passo a passo, que substitui sua arquitetura de servidor baseada em Java por uma biblioteca integrada que se torna perfeita em aplicativos .NET .
Por que migrar do PDFreactor para o IronPDF?
Entendendo o PDFreactor
O PDFreactor é um poderoso servidor de conversão de HTML para PDF que se integra a diversas plataformas. Como solução comercial, o PDFreactor utiliza sua tecnologia proprietária para converter conteúdo HTML e CSS em documentos PDF de alta qualidade. Entre seus atributos notáveis, o PDFreactor suporta uma ampla gama de propriedades CSS, o que o torna um forte candidato para renderização de layouts complexos.
No entanto, a dependência do PDFreactor em Java apresenta certos desafios em ambientes .NET , onde sua natureza não nativa pode complicar a implantação e a integração. Sua dependência do Java cria uma sobrecarga adicional em aplicações .NET , frequentemente exigindo trabalho de integração adicional.
O problema de dependência do Java
A arquitetura do PDFreactor cria diversos desafios em ambientes .NET :
-
Java Runtime necessário: Requer a instalação do JRE/JDK em todos os servidores.
-
Arquitetura de servidor: Executa como um serviço separado que requer infraestrutura adicional. Por ser uma solução baseada em servidor, o PDFreactor requer chamadas à API REST para cada conversão.
-
Implantação complexa: Gerenciar dependências Java em um ecossistema predominantemente .NET pode complicar a configuração e aumentar os custos de manutenção. Dois ambientes de execução (Java + .NET) para gerenciar em pipelines de CI/CD.
-
Comunicação entre processos: a API REST ou a comunicação por socket adicionam latência. Toda conversão de PDF requer uma comunicação HTTP de ida e volta com o servidor.
-
Gerenciamento de licenças separado: a licença está vinculada à instância do servidor, não ao aplicativo. Licenciamento por servidor vinculado à instância do serviço Java.
- Isolamento de recursos: Gerenciamento separado da memória do processo e da CPU. Servidor adicional para monitoramento, dimensionamento e manutenção.
Comparação entre PDFreactor e IronPDF
| Característica/Aspecto | PDFreactor | IronPDF |
|---|---|---|
| Biblioteca .NET nativa | Não (baseado em Java) | Sim |
| Tempo de execução | Java (servidor externo) | .NET nativo (em processo) |
| Arquitetura | Serviço de API REST | Biblioteca NuGet |
| Implantação | Java + configuração do servidor | Pacote NuGet único |
| Dependências | JRE + cliente HTTP | Autossuficiente |
| Latência | viagem de ida e volta na rede | Chamadas de método direto |
| Capacidade multiplataforma | Sim (dependente de Java) | Sim (Chromium incluído) |
| Suporte a CSS | Suporte avançado para CSS3 e CSS Paged Media. | Suporte completo a HTML5/CSS3 |
| Complexidade de Implantação | Mais complexo devido ao Java | Simples e com integração direta com o .NET. |
| Recursos de manipulação de PDF | Básico (somente geração) | Abrangente, incluindo mesclar, dividir, editar e anotar. |
Em contraste com o PDFreactor, o IronPDF se apresenta como uma biblioteca .NET nativa, projetada especificamente para se integrar perfeitamente a projetos .NET sem dependências externas como o Java. O IronPDF utiliza um mecanismo de renderização Chromium integrado, permitindo a conversão de HTML para PDF com apenas algumas linhas de código.
Para equipes que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece uma solução .NET nativa que elimina a complexidade do servidor Java, ao mesmo tempo que oferece um gerenciamento abrangente do ciclo de vida do PDF.
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
# Remove PDFreactor NuGet packages
dotnet remove package PDFreactor.NET
dotnet remove package PDFreactor.Native.Windows.x64
# Stop PDFreactor server service (if running locally)
# Windows: net stop PDFreactor
# Linux: sudo systemctl stop pdfreactor
# Install IronPDF
dotnet add package IronPdf
# Remove PDFreactor NuGet packages
dotnet remove package PDFreactor.NET
dotnet remove package PDFreactor.Native.Windows.x64
# Stop PDFreactor server service (if running locally)
# Windows: net stop PDFreactor
# Linux: sudo systemctl stop pdfreactor
# Install IronPDF
dotnet add package IronPdf
Configuração de licença
PDFreactor (baseado em servidor):
// License configured on server via config file or command line
// Client connects to licensed server
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423");
// License configured on server via config file or command line
// Client connects to licensed server
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423");
' License configured on server via config file or command line
' Client connects to licensed server
Dim pdfReactor = New PDFreactor("http://pdfreactor-server:9423")
IronPDF (nível de aplicação):
// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
' One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
Identificar o uso do PDFreactor
# Find PDFreactor usage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .
# Find Mídia paginada CSS rules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
# Find PDFreactor usage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .
# Find Mídia paginada CSS rules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
Referência completa da API
Alterações de namespace
// Before: PDFreactor
using RealObjects.PDFreactor;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PDFreactor
using RealObjects.PDFreactor;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
Imports System.IO
Mapeamentos de Classes Principais
| PDFreactor | IronPDF |
|---|---|
PDFreactor |
ChromePdfRenderer |
Configuration |
ChromePdfRenderOptions |
Result |
PdfDocument |
config.Document = html |
renderer.RenderHtmlAsPdf(html) |
result.Document (byte[]) |
pdf.BinaryData |
Mapeamentos de propriedades de configuração
| Configuração do PDFreactor | Opções de renderização do IronPDF |
|---|---|
config.Document = html |
renderer.RenderHtmlAsPdf(html) |
config.Document = url |
renderer.RenderUrlAsPdf(url) |
config.PageFormat = PageFormat.A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
config.PageOrientation |
RenderingOptions.PaperOrientation |
config.PageMargins |
RenderingOptions.MarginTop/Bottom/Left/Right |
config.EnableJavaScript = true |
RenderingOptions.EnableJavaScript = true |
config.AddUserStyleSheet(css) |
Incorporar CSS em HTML |
config.Title |
pdf.MetaData.Title |
config.Encryption |
pdf.SecuritySettings |
Novos recursos não disponíveis no PDFreactor
| Recurso IronPDF | Descrição |
|---|---|
PdfDocument.Merge() |
Mesclar vários PDFs |
pdf.ApplyWatermark() |
Adicionar marcas d'água |
pdf.ExtractAllText() |
Extração de texto |
pdf.Form |
Preenchimento de formulário |
pdf.Sign() |
Assinaturas digitais |
Exemplos de migração de código
Exemplo 1: Conversão de string HTML para PDF
Antes (PDFreactor):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = new PDFreactor();
string html = "<html><body><h1>Hello World</h1></body></html>";
Configuration config = new Configuration();
config.Document = html;
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("output.pdf", result.Document);
}
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = new PDFreactor();
string html = "<html><body><h1>Hello World</h1></body></html>";
Configuration config = new Configuration();
config.Document = html;
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("output.pdf", result.Document);
}
}
Imports RealObjects.PDFreactor
Imports System.IO
Class Program
Shared Sub Main()
Dim pdfReactor As New PDFreactor()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim config As New Configuration()
config.Document = html
Dim result As Result = pdfReactor.Convert(config)
File.WriteAllBytes("output.pdf", result.Document)
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
A diferença fundamental reside no padrão arquitetônico. O PDFreactor requer a criação de uma instância PDFreactor (que se conecta ao servidor Java), um objeto Configuration separado para armazenar configurações e conteúdo HTML, a chamada de Convert() que retorna um objeto Result e, finalmente, a gravação dos bytes result.Document no arquivo usando File.WriteAllBytes().
O IronPDF simplifica isso criando um ChromePdfRenderer, chamando RenderHtmlAsPdf() diretamente com a string HTML e usando o método SaveAs() integrado no PdfDocument retornado. Sem conexão com o servidor, sem objeto de configuração, sem manipulação manual de bytes. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.
Exemplo 2: Conversão de URL para PDF
Antes (PDFreactor):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = new PDFreactor();
Configuration config = new Configuration();
config.Document = "https://www.example.com";
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("webpage.pdf", result.Document);
}
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = new PDFreactor();
Configuration config = new Configuration();
config.Document = "https://www.example.com";
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("webpage.pdf", result.Document);
}
}
Imports RealObjects.PDFreactor
Imports System.IO
Class Program
Shared Sub Main()
Dim pdfReactor As New PDFreactor()
Dim config As New Configuration()
config.Document = "https://www.example.com"
Dim result As Result = pdfReactor.Convert(config)
File.WriteAllBytes("webpage.pdf", result.Document)
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
O PDFreactor usa a mesma propriedade config.Document tanto para strings HTML quanto para URLs, determinando o tipo automaticamente. O IronPDF fornece métodos explícitos: RenderHtmlAsPdf() para strings HTML e RenderUrlAsPdf() para URLs. Essa abordagem explícita melhora a clareza do código e o suporte ao IntelliSense. Saiba mais em nossos tutoriais .
Exemplo 3: Cabeçalhos e rodapés com números de página
Antes (PDFreactor):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = new PDFreactor();
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
Configuration config = new Configuration();
config.Document = html;
config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }");
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("document.pdf", result.Document);
}
}
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactor pdfReactor = new PDFreactor();
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
Configuration config = new Configuration();
config.Document = html;
config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }");
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("document.pdf", result.Document);
}
}
Imports RealObjects.PDFreactor
Imports System.IO
Class Program
Shared Sub Main()
Dim pdfReactor As New PDFreactor()
Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"
Dim config As New Configuration()
config.Document = html
config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }")
Dim result As Result = pdfReactor.Convert(config)
File.WriteAllBytes("document.pdf", result.Document)
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Header Text"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Header Text"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Header Text"
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Page {page}"
}
Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End Module
Este exemplo mostra a diferença de sintaxe mais significativa. O PDFreactor usa a sintaxe Mídia paginada CSS com regras @page, regiões @bottom-center e counter(page) para números de página injetados via AddUserStyleSheet().
IronPDF usa uma API .NET nativa com objetos TextHeaderFooter atribuídos a RenderingOptions.TextHeader e RenderingOptions.TextFooter. Os números de página usam o marcador {page} em vez do CSS counter(page). Observe que o IronPDF também requer a importação do namespace IronPdf.Rendering para classes de cabeçalho/rodapé.
Notas críticas sobre migração
Não é necessário servidor
O IronPDF é executado no mesmo processo — não é necessário configurar um servidor Java:
// PDFreactor: Requires server connection
var pdfReactor = new PDFreactor("http://localhost:9423");
// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
// PDFreactor: Requires server connection
var pdfReactor = new PDFreactor("http://localhost:9423");
// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
' PDFreactor: Requires server connection
Dim pdfReactor = New PDFreactor("http://localhost:9423")
' IronPDF: No server URL needed
Dim renderer = New ChromePdfRenderer()
API Mídia paginada CSS para IronPDF
Substitua as regras CSS @page por RenderingOptions:
// PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
// IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};
// PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
// IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};
' PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
' IronPDF equivalent:
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page}"
}
Sintaxe do marcador de posição do número da página
// PDFreactor CSS: counter(page)
// IronPDF: {page}
// PDFreactor CSS: counter(pages)
// IronPDF: {total-pages}
// PDFreactor CSS: counter(page)
// IronPDF: {page}
// PDFreactor CSS: counter(pages)
// IronPDF: {total-pages}
' PDFreactor CSS: counter(page)
' IronPDF: {page}
' PDFreactor CSS: counter(pages)
' IronPDF: {total-pages}
Alteração no tratamento de resultados
O padrão Configuração + Resultado torna-se um documento PDF direto:
// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);
// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;
// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);
// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;
' PDFreactor: Configuration → Convert → Result → bytes
Dim result As Result = pdfReactor.Convert(config)
Dim bytes As Byte() = result.Document
File.WriteAllBytes("output.pdf", bytes)
' IronPDF: Direct PdfDocument with built-in methods
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' Or: Dim bytes As Byte() = pdf.BinaryData
Alteração nas unidades de margem
O PDFreactor usa strings; O IronPDF usa milímetros:
// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm
// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm
' PDFreactor: config.PageMargins.Top = "1in"
' IronPDF: renderer.RenderingOptions.MarginTop = 25.4 ' 1 inch in mm
Novas funcionalidades após a migração
Após migrar para o IronPDF, você obtém recursos que o PDFreactor não pode fornecer:
Fusão de PDFs
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Marcas d'água
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
Extração de texto
string text = pdf.ExtractAllText();
string text = pdf.ExtractAllText();
Dim text As String = pdf.ExtractAllText()
Proteção por senha
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
Resumo da comparação de recursos
| Recurso | PDFreactor | IronPDF |
|---|---|---|
| HTML para PDF | ✓ | ✓ |
| URL para PDF | ✓ | ✓ |
| Cabeçalhos/Rodapés | Mídia paginada CSS | API nativa |
| Configurações da página | ✓ | ✓ |
| Suporte a JavaScript | ✓ | ✓ |
| .NET nativo | ✗ | ✓ |
| Em andamento | ✗ | ✓ |
| Mesclar PDFs | ✗ | ✓ |
| Dividir PDFs | ✗ | ✓ |
| Marcas d'água | ✗ | ✓ |
| Extração de texto | ✗ | ✓ |
| Preenchimento de formulários | ✗ | ✓ |
| Assinaturas digitais | ✗ | ✓ |
Lista de verificação para migração
Pré-migração
- Inventariar todo o uso do PDFreactor na base de código.
- Documente todas as regras de mídia paginada CSS utilizadas.
- Anote todas as configurações (margens, tamanho da página, JavaScript)
- Planeje o armazenamento da chave de licença do IronPDF (variáveis de ambiente recomendadas)
- Teste primeiro com a licença de avaliação do IronPDF
Alterações no pacote
- Remover o pacote NuGet
PDFreactor.NET - Remover o pacote NuGet
PDFreactor.Native.Windows.x64 - Instale o pacote NuGet
IronPdf:dotnet add package IronPdf
Alterações no código
- Atualizar importações de namespace (
using RealObjects.PDFreactor;→using IronPdf;) - Adicione
using IronPdf.Rendering;para classes de cabeçalho/rodapé - Substitua a classe
PDFreactorpela classeChromePdfRenderer - Converter objetos
Configurationem propriedadesRenderingOptions - Substitua
config.Document = htmlporrenderer.RenderHtmlAsPdf(html) - Substitua
config.Document = urlporrenderer.RenderUrlAsPdf(url) - Substitua
File.WriteAllBytes(path, result.Document)porpdf.SaveAs(path) - Converter regras CSS
@pageem objetosTextFooter - Atualizar marcadores de página (
counter(page)→{page}) - Converter unidades de margem de strings para milímetros
Migração de infraestrutura
- Remover requisito de tempo de execução Java
- Desativar o servidor PDFreactor
- Atualizar configurações do Docker/implantação
- Atualizar pipelines de CI/CD
Pós-migração
- A qualidade de saída do PDF de teste corresponde às expectativas.
- Verificar a renderização do cabeçalho/rodapé
- Verificar a execução do JavaScript, caso seja utilizado.
- Adicionar novas funcionalidades (fusão, marcas d'água, segurança) conforme necessário.

