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 :
-
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, oPDFreactorrequer 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 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
- 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
#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
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")
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
# 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" .
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
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
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.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
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
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
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.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()
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}"
}
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}
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
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
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")
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 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.dlldo 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
PDFreactorporChromePdfRenderer - Converta objetos
Configurationpara propriedadesRenderingOptions - Substitua
config.Document = htmlporrenderer.RenderHtmlAsPdf(html) - Substitua
config.Document = urlporrenderer.RenderUrlAsPdf(url) - Substitua
File.WriteAllBytes(path, result.Document)porpdf.SaveAs(path) - Converta regras CSS
@pagepara objetosTextFooter - 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.

