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

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 :

  1. Java Runtime necessário: Requer a instalação do JRE/JDK em todos os servidores.

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

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

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

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

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

  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

# 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
SHELL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Extração de texto

string text = pdf.ExtractAllText();
string text = pdf.ExtractAllText();
Dim text As String = pdf.ExtractAllText()
$vbLabelText   $csharpLabel

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

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 PDFreactor pela classe ChromePdfRenderer
  • Converter objetos Configuration em propriedades RenderingOptions
  • Substitua config.Document = html por renderer.RenderHtmlAsPdf(html)
  • Substitua config.Document = url por renderer.RenderUrlAsPdf(url)
  • Substitua File.WriteAllBytes(path, result.Document) por pdf.SaveAs(path)
  • Converter regras CSS @page em objetos TextFooter
  • 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.

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