Como migrar do pdforge para o IronPDF em C#
Por que migrar do pdforge para o IronPDF?
Entendendo o pdforge
O pdforge é uma API de geração de PDFs baseada na nuvem, que oferece uma maneira simples de produzir arquivos PDF integrando-se ao seu aplicativo por meio de chamadas de API. Ao delegar a tarefa de criação de PDFs a uma API externa, os desenvolvedores podem simplificar o processo de desenvolvimento. No entanto, o pdforge apresenta desvantagens como dependências externas, opções de personalização limitadas e custos contínuos de assinatura, que os desenvolvedores devem levar em consideração.
O problema de dependência da API na nuvem
O pdforge processa todos os documentos em servidores externos na nuvem. Essa arquitetura gera preocupações significativas para aplicações em produção:
-
Processamento em servidor externo: Cada PDF gerado requer o envio do seu HTML/dados para os servidores da pdforge — seus documentos saem da sua infraestrutura.
-
Riscos de privacidade e conformidade: Dados sensíveis trafegam pela internet para servidores de terceiros. Ao usar o pdforge, os desenvolvedores precisam levar em consideração as preocupações de segurança relacionadas aos dados enviados para uma API externa. Se o conteúdo do PDF incluir informações confidenciais, isso pode ser um fator crítico a ser considerado.
-
Custos contínuos de assinatura: As taxas mensais acumulam-se indefinidamente sem aquisição de ativos. O modelo SaaS da pdforge introduz despesas operacionais contínuas que podem acumular-se ao longo do tempo.
-
Dependência da Internet: Não há geração de PDF quando a rede não está disponível.
-
Limites de taxa: os limites de uso da API podem restringir o desempenho de aplicativos de alto volume.
- Latência de rede: O tempo de ida e volta adiciona segundos a cada geração de PDF.
Comparação entre pdforge e IronPDF
| Recurso | pdforge | IronPDF |
|---|---|---|
| Tipo de implantação | API baseada em nuvem | Biblioteca local |
| Dependências | Requer internet e autenticação de API. | Sem dependências externas |
| Personalização | Controle limitado sobre a geração de PDFs | Controle total sobre a personalização. |
| Estrutura de custos | Assinatura contínua | Opção de compra única |
| Segurança | Possíveis problemas com dados enviados pela internet | Mantém o processamento de dados inteiramente dentro do ambiente local. |
| Complexidade de configuração | Configuração inicial mais fácil devido ao manuseio externo. | Requer mais configuração inicial. |
O IronPDF se diferencia por fornecer uma biblioteca totalmente local, concedendo aos desenvolvedores controle completo sobre o processo de criação de PDFs. Isso é particularmente vantajoso para aplicações onde o gerenciamento interno de arquivos é preferido, ou onde chamadas de API externas introduzem preocupações de segurança. O IronPDF processa tudo localmente, minimizando esses riscos.
Para equipes que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece uma base de processamento local que elimina a dependência da nuvem, ao mesmo tempo que adiciona recursos abrangentes de manipulação de PDFs.
Antes de começar
Pré-requisitos
- Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
- Licença do IronPDF : Obtenha sua chave de licença em IronPDF
Alterações no pacote NuGet
# Remove pdforge packages
dotnet remove package pdforge
dotnet remove package PdfForge
# Install IronPDF
dotnet add package IronPdf
# Remove pdforge packages
dotnet remove package pdforge
dotnet remove package PdfForge
# Install IronPDF
dotnet add package IronPdf
Configuração de licença
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Identificar o uso do pdforge
# Find pdforge usage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .
# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .
# Find pdforge usage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .
# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .
Referência completa da API
Alterações de namespace
// Before: pdforge
using PdfForge;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: pdforge
using PdfForge;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: pdforge
Imports PdfForge
Imports System.IO
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Mapeamentos de Classes Principais
| pdforge | IronPDF |
|---|---|
HtmlToPdfConverter |
ChromePdfRenderer |
PdfClient |
ChromePdfRenderer |
PageSize.A4 |
PdfPaperSize.A4 |
PageOrientation.Landscape |
PdfPaperOrientation.Landscape |
Tipo de retorno: byte[] |
PdfDocument |
Mapeamentos de Métodos
| pdforge | IronPDF |
|---|---|
converter.ConvertHtmlString(html) |
renderer.RenderHtmlAsPdf(html) |
converter.ConvertUrl(url) |
renderer.RenderUrlAsPdf(url) |
File.WriteAllBytes(path, bytes) |
pdf.SaveAs(path) |
Tipo de retorno: byte[] |
pdf.BinaryData |
Mapeamentos de Configuração
| pdforge | IronPDF (Opções de renderização) |
|---|---|
converter.PageSize = PageSize.A4 |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
converter.Orientation = PageOrientation.Landscape |
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
Footer = "Page {page} of {totalPages}" |
TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}" } |
Novos recursos não disponíveis no pdforge
| Recurso IronPDF | Descrição |
|---|---|
PdfDocument.Merge() |
Combinar vários PDFs |
pdf.ExtractAllText() |
Extrair texto de PDFs |
pdf.ApplyWatermark() |
Adicionar marcas d'água |
pdf.SecuritySettings |
Proteção por senha |
pdf.Form |
Preenchimento de formulário |
pdf.SignWithDigitalSignature() |
Assinaturas digitais |
Exemplos de migração de código
Exemplo 1: Conversão de string HTML para PDF
Antes (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports PdfForge
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New HtmlToPdfConverter()
Dim html = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = converter.ConvertHtmlString(html)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html = "<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 aqui reside no modelo de processamento e no tipo de retorno. O pdforge usa HtmlToPdfConverter com ConvertHtmlString() que retorna um array byte[]—você deve então usar File.WriteAllBytes() para salvar o resultado.
IronPDF usa ChromePdfRenderer com RenderHtmlAsPdf() que retorna um objeto PdfDocument. Este objeto pode ser salvo diretamente com SaveAs(), ou você pode acessar pdf.BinaryData se precisar dos bytes brutos. O PdfDocument também permite manipulação (adicionar marcas d'água, mesclar com outros PDFs, adicionar segurança) antes de salvar. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.
Exemplo 2: Conversão de URL para PDF
Antes (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var pdf = converter.ConvertUrl("https://example.com");
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var pdf = converter.ConvertUrl("https://example.com");
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports PdfForge
Imports System.IO
Class Program
Shared Sub Main()
Dim converter = New HtmlToPdfConverter()
Dim pdf = converter.ConvertUrl("https://example.com")
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
O pdforge usa ConvertUrl() na classe HtmlToPdfConverter, retornando bytes que você escreve com File.WriteAllBytes(). IronPDF usa RenderUrlAsPdf() em ChromePdfRenderer, retornando um PdfDocument com o método embutido SaveAs().
A principal vantagem do IronPDF é que a URL é obtida e renderizada localmente usando um mecanismo Chromium — nenhum dado é enviado para servidores externos. O IronPDF, por ser uma biblioteca local, pode oferecer melhor desempenho, pois não há tempo de ida e volta envolvido em solicitações da web. Saiba mais sobre a conversão de URL para PDF .
Exemplo 3: Converter arquivo HTML para PDF com configurações personalizadas
Antes (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
var htmlContent = File.ReadAllText("input.html");
var pdf = converter.ConvertHtmlString(htmlContent);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
var htmlContent = File.ReadAllText("input.html");
var pdf = converter.ConvertHtmlString(htmlContent);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports PdfForge
Imports System.IO
Class Program
Shared Sub Main()
Dim converter As New HtmlToPdfConverter()
converter.PageSize = PageSize.A4
converter.Orientation = PageOrientation.Landscape
Dim htmlContent As String = File.ReadAllText("input.html")
Dim pdf As Byte() = converter.ConvertHtmlString(htmlContent)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Dim htmlContent = System.IO.File.ReadAllText("input.html")
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
Este exemplo mostra a diferença no padrão de configuração. O pdforge define propriedades diretamente no objeto conversor (converter.PageSize = PageSize.A4, converter.Orientation = PageOrientation.Landscape).
IronPDF usa a propriedade RenderingOptions com enums fortemente tipados: renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 e renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape. Isso proporciona suporte ao IntelliSense e segurança de tipos em tempo de compilação. Observe que o IronPDF requer a importação do namespace IronPdf.Rendering para as enumerações de tamanho e orientação do papel. Consulte os tutoriais para obter mais exemplos de configuração.
Notas críticas sobre migração
Alteração do tipo de retorno
O pdforge retorna byte[]; IronPDF retorna PdfDocument:
// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if needed
// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if needed
' pdforge: Returns byte()
Dim pdfBytes As Byte() = converter.ConvertHtmlString(html)
File.WriteAllBytes("output.pdf", pdfBytes)
' IronPDF: Returns PdfDocument
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf") ' Direct save
Dim bytes As Byte() = pdf.BinaryData ' Get bytes if needed
Alteração da classe do conversor
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
' pdforge: HtmlToPdfConverter
Dim converter As New HtmlToPdfConverter()
' IronPDF: ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
Alterações no nome do método
// pdforge methods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
// IronPDF methods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
// pdforge methods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
// IronPDF methods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
Salvar alteração de método
// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
' pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes)
' IronPDF: Built-in save method
pdf.SaveAs("output.pdf")
Alteração do local de configuração
O pdforge utiliza propriedades no conversor; IronPDF usa RenderingOptions:
// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
' pdforge: Properties on converter
converter.PageSize = PageSize.A4
converter.Orientation = PageOrientation.Landscape
' IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Sintaxe de espaço reservado para cabeçalho/rodapé
Se você usar números de página em cabeçalhos ou rodapés, a sintaxe do marcador de posição será diferente:
// pdforge placeholders
"Page {page} of {totalPages}"
// IronPDF placeholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages
// pdforge placeholders
"Page {page} of {totalPages}"
// IronPDF placeholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages
Novas funcionalidades após a migração
Após migrar para o IronPDF, você obtém recursos que o pdforge não pode oferecer:
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")
Extração de texto
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim allText As String = pdf.ExtractAllText()
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>")
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 | pdforge | IronPDF |
|---|---|---|
| HTML para PDF | ✓ | ✓ |
| URL para PDF | ✓ | ✓ |
| Configurações da página | ✓ | ✓ |
| Compatível com modo offline | ✗ | ✓ |
| Processamento local | ✗ | ✓ |
| Mesclar PDFs | ✗ | ✓ |
| Dividir PDFs | ✗ | ✓ |
| Texto extraído | ✗ | ✓ |
| Marcas d'água | ✗ | ✓ |
| Preenchimento de formulários | ✗ | ✓ |
| Assinaturas digitais | ✗ | ✓ |
| Proteção por senha | ✗ | ✓ |
| Sem limites de taxa | ✗ | ✓ |
| Licença de uso único | ✗ | ✓ |
Lista de verificação para migração
Pré-migração
- Inventariar todas as chamadas da API do pdforge no código-fonte.
- Documentar as opções de configuração atuais utilizadas (tamanho da página, orientação)
- Identificar os espaços reservados de cabeçalho/rodapé a serem atualizados (
{totalPages}→{total-pages}) - 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
pdforge - Remover o pacote NuGet
PdfForge - Instale o pacote NuGet
IronPdf:dotnet add package IronPdf
Alterações no código
- Atualizar todas as importações de namespace (
using PdfForge;→using IronPdf;) - Adicione
using IronPdf.Rendering;para enumerações de tamanho e orientação do papel - Substitua
HtmlToPdfConverterporChromePdfRenderer - Substitua
ConvertHtmlString()porRenderHtmlAsPdf() - Substitua
ConvertUrl()porRenderUrlAsPdf() - Substitua
File.WriteAllBytes()porpdf.SaveAs() - Mover a propriedade
PageSizeparaRenderingOptions.PaperSize - Mover a propriedade
OrientationparaRenderingOptions.PaperOrientation - Atualizar nomes de enumeração (
PageSize.A4→PdfPaperSize.A4) - Atualizar nomes de enumeração (
PageOrientation.Landscape→PdfPaperOrientation.Landscape) - Atualizar a sintaxe dos espaços reservados em cabeçalhos/rodapés
Pós-migração
- A qualidade de saída do PDF de teste corresponde às expectativas.
- Verificar se a operação offline funciona
- Remover credenciais da API da configuração
- Adicionar novas funcionalidades (fusão, marcas d'água, segurança) conforme necessário.

