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

Como migrar do PDFreactor para o IronPDF em C#

A migração doPDFreactorpara 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 doPDFreactorpara o IronPDF?

Entendendo o PDFreactor

OPDFreactoré um poderoso servidor de conversão de HTML para PDF que se integra a diversas plataformas. Como solução comercial, oPDFreactorutiliza sua tecnologia proprietária para converter conteúdo HTML e CSS em documentos PDF de alta qualidade. Entre seus atributos notáveis, oPDFreactorsuporta uma ampla gama de propriedades CSS, o que o torna um forte candidato para renderização de layouts complexos.

No entanto, a dependência doPDFreactorem 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 doPDFreactorcria 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, oPDFreactorrequer 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 entrePDFreactore 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 adotam as versões modernas do .NET, o IronPDF fornece uma solução nativa .NET que elimina a complexidade do servidor Java enquanto 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

#PDFreactoris NOT distributed via NuGet. The .NET wrapper ships as
# PDFreactor.dll inside <PDFreactor-install>/clients/netstandard2/bin/
# (or netframework40/bin for older .NET Framework projects).
# Remove the assembly reference from your .csproj.

# StopPDFreactorWeb Service (Java/Jetty, default port 9423)
# Windows: net stop PDFreactor
# Linux:   sudo systemctl stop pdfreactor

# Install IronPDF
dotnet add package IronPdf
#PDFreactoris NOT distributed via NuGet. The .NET wrapper ships as
# PDFreactor.dll inside <PDFreactor-install>/clients/netstandard2/bin/
# (or netframework40/bin for older .NET Framework projects).
# Remove the assembly reference from your .csproj.

# StopPDFreactorWeb Service (Java/Jetty, default port 9423)
# 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 thePDFreactorWeb Service via config file or command line.
// The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423/service/rest");
// License configured on thePDFreactorWeb Service via config file or command line.
// The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423/service/rest");
' License configured on thePDFreactorWeb Service via config file or command line.
' The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
Dim pdfReactor = New PDFreactor("http://pdfreactor-server:9423/service/rest")
$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

# FindPDFreactorusage
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" .
# FindPDFreactorusage
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(Web Service client)
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before:PDFreactor(Web Service client)
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO

' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
$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 doPDFreactor 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.UserStyleSheets = new List<Resource>{...} 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):

//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = 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);
    }
}
//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = 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.Webservice.Client
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.PDFreactorrequer a criação de uma instância PDFreactor (que se conecta ao servidor Java), um objeto Configuration separado para manter as configurações e o conteúdo HTML, chamando Convert() que retorna um objeto Result, e finalmente escrevendo os bytes result.Document para um arquivo usando File.WriteAllBytes().

IronPDF simplifica isso para criar um ChromePdfRenderer, chamando RenderHtmlAsPdf() diretamente com a string HTML, e usando o método embutido SaveAs() 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):

//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = new PDFreactor();

        Configuration config = new Configuration();
        config.Document = "https://www.example.com";

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("webpage.pdf", result.Document);
    }
}
//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = 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.Webservice.Client
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

PDFreactor usa a mesma propriedade config.Document tanto para strings HTML quanto para URLs, determinando automaticamente o tipo.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):

//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = 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.UserStyleSheets = new System.Collections.Generic.List<Resource>
        {
            new Resource { Content = "@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }" }
        };

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("document.pdf", result.Document);
    }
}
//PDFreactor.NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run thePDFreactorWeb Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
       PDFreactorpdfReactor = 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.UserStyleSheets = new System.Collections.Generic.List<Resource>
        {
            new Resource { Content = "@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.Webservice.Client
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.UserStyleSheets = New System.Collections.Generic.List(Of Resource) From {
            New Resource With {.Content = "@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.PDFreactorusa a sintaxe Mídia paginada CSS com regras @page, regiões @bottom-center, e counter(page) para números de página inseridos via a lista UserStyleSheets de itens Resource.

IronPDF usa uma API nativa .NET com objetos TextHeaderFooter atribuídos a RenderingOptions.TextHeader e RenderingOptions.TextFooter. Números de página usam o espaço reservado {page} em vez do CSS counter(page).


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 the Web Service running on a reachable host
var pdfReactor = new PDFreactor("http://localhost:9423/service/rest");

// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
// PDFreactor: Requires the Web Service running on a reachable host
var pdfReactor = new PDFreactor("http://localhost:9423/service/rest");

// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
' PDFreactor: Requires the Web Service running on a reachable host
Dim pdfReactor = New PDFreactor("http://localhost:9423/service/rest")

' 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:

//PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter 
{ 
    CenterText = "Page {page}" 
};
//PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter 
{ 
    CenterText = "Page {page}" 
};
'PDFreactorCSS: @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

//PDFreactorCSS: counter(page)
// IronPDF: {page}

//PDFreactorCSS: counter(pages)  
// IronPDF: {total-pages}
//PDFreactorCSS: counter(page)
// IronPDF: {page}

//PDFreactorCSS: counter(pages)  
// IronPDF: {total-pages}
'PDFreactorCSS: counter(page)
' IronPDF: {page}

'PDFreactorCSS: 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

OPDFreactorusa 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 oPDFreactornã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 doPDFreactorna 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

  • Remova a referência direta da montagem PDFreactor.dll do seu .csproj
  • Desativar o Serviço WebPDFreactor(Java/Jetty)
  • Instale o pacote NuGet IronPdf: dotnet add package IronPdf

Alterações no código

  • Atualize as importações de namespace (using RealObjects.PDFreactor.Webservice.Client;using IronPdf;)
  • Adicione using IronPdf.Rendering; para classes de cabeçalho/rodapé
  • Substitua a classe PDFreactor por ChromePdfRenderer
  • Converta objetos Configuration para 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)
  • Converta regras CSS @page para objetos TextFooter
  • Atualize os espaços reservados para números 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.

ObservePDFReactor é uma marca registrada do seu respectivo proprietário. Este site não é afiliado, aprovado ou patrocinado pela RealObjects. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redaçã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 Iron

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