IRONSOFTWAREHOME
VÍDEOS

Como converter SVGs em PDF usando C#

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

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/AspectoPDFreactorIronPDF
Biblioteca .NET nativaNão (baseado em Java)Sim
Tempo de execuçãoJava (servidor externo).NET nativo (em processo)
ArquiteturaServiço de API RESTBiblioteca NuGet
ImplantaçãoJava + configuração do servidorPacote NuGet único
DependênciasJRE + cliente HTTPAutossuficiente
Latênciaviagem de ida e volta na redeChamadas de método direto
Capacidade multiplataformaSim (dependente de Java)Sim (Chromium incluído)
Suporte a CSSSuporte avançado para CSS3 e CSS Paged Media.Suporte completo a HTML5/CSS3
Complexidade de ImplantaçãoMais complexo devido ao JavaSimples e com integração direta com o .NET.
Recursos de manipulação de PDFBá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
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");
C#

IronPDF (nível de aplicação):

// 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" .
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;
C#

Mapeamentos de Classes Principais

PDFreactorIronPDF
PDFreactorChromePdfRenderer
ConfigurationChromePdfRenderOptions
ResultPdfDocument
config.Document = htmlrenderer.RenderHtmlAsPdf(html)
result.Document (byte[])pdf.BinaryData

Mapeamentos de propriedades de configuração

Configuração doPDFreactorOpções de renderização do IronPDF
config.Document = htmlrenderer.RenderHtmlAsPdf(html)
config.Document = urlrenderer.RenderUrlAsPdf(url)
config.PageFormat = PageFormat.A4RenderingOptions.PaperSize = PdfPaperSize.A4
config.PageOrientationRenderingOptions.PaperOrientation
config.PageMarginsRenderingOptions.MarginTop/Bottom/Left/Right
config.EnableJavaScript = trueRenderingOptions.EnableJavaScript = true
config.UserStyleSheets = new List<Resource>{...}Incorporar CSS em HTML
config.Titlepdf.MetaData.Title
config.Encryptionpdf.SecuritySettings

Novos recursos não disponíveis no PDFreactor

Recurso IronPDFDescrição
PdfDocument.Merge()Mesclar vários PDFs
pdf.ApplyWatermark()Adicionar marcas d'água
pdf.ExtractAllText()Extração de texto
pdf.FormPreenchimento 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);
    }
}
C#

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");
    }
}

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);
    }
}
C#

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");
    }
}

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);
    }
}
C#

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");
    }
}

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();

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}" 
};
C#

Sintaxe do marcador de posição do número da página

//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;

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

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");

Marcas d'água

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");

Extração de texto

string text = pdf.ExtractAllText();

Proteção por senha

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";

Resumo da comparação de recursos

RecursoPDFreactorIronPDF
HTML para PDF
URL para PDF
Cabeçalhos/RodapésMídia paginada CSSAPI 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.

Observe: PDFReactor é 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 bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.