Como migrar do Easy PDF SDK para o IronPDF em C#
O SDK de PDF fácil depende de diversas tecnologias legadas que criam desafios significativos de implantação e manutenção em ambientes de desenvolvimento modernos.
Problemas comuns de implantação do SDK Easy PDF
Os desenvolvedores frequentemente se deparam com esses problemas ao trabalhar com o Easy PDF SDK:
bcl.easypdf.interop.easypdfprinter.dll error loadingCOM object that has been separated from its underlying RCW cannot be usedTimeout expired waiting for print job to completeThe printer operation failed because the service is not runningError: Access denied(sessão interativa necessária)Cannot find printer: BCL easyPDF Printer
Esses erros decorrem da arquitetura fundamental do SDK de PDF fácil — ele requer drivers de impressora virtuais, interoperabilidade COM e sessões interativas do Windows que simplesmente não existem em ambientes de servidor modernos.
SDK de PDF fácil vs. IronPDF: Principais diferenças
| Recurso | SDK de PDF fácil | IronPDF |
|---|---|---|
| Plataforma | Exclusivo para Windows | Windows, Linux, macOS, Docker |
| Dependência do escritório | Obrigatório | Nenhum |
| Instalação | MSI complexo + driver de impressora + COM | Pacote NuGet simples |
| Suporte ao servidor | Requer sessão interativa | Executa sem monitor |
| Renderização HTML | Básico (para escritório) | Chromium completo (CSS3, JS) |
| Suporte .NET | .NET Core limitado | .NET completo 5/6/7/8/9 |
| Padrão Assíncrono | Baseado em retorno de chamada | assíncrono/await nativo |
| Suporte a contêineres | Não é possível executar | Docker/Kubernetes completo |
Limitações da plataforma
O fato do SDK de PDF fácil depender exclusivamente de sistemas Windows, exigindo a instalação do Microsoft Office para conversões, impede o suporte para Linux, macOS ou ambientes conteinerizados como o Docker. Essa dependência torna a configuração do servidor complexa e limita a adoção do serviço a ambientes Windows — uma restrição significativa para equipes que praticam DevOps multiplataforma ou usam contêineres para implantação.
Preparação pré-migratória
Pré-requisitos
Certifique-se de que seu ambiente atenda a estes requisitos:
- .NET Framework 4.6.2 ou superior ou .NET Core 3.1 / .NET 5-9
- Visual Studio 2019 ou superior ou VS Code com extensão C#
- Acesso ao Gerenciador de Pacotes NuGet
- Chave de licença do IronPDF (teste gratuito disponível em IronPDF )
Auditoria de uso do SDK Easy PDF
Execute estes comandos no diretório da sua solução para identificar todas as referências ao Easy PDF SDK:
# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .
# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .
# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .
# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
# Find all BCL using statements
grep -r "using BCL" --include="*.cs" .
# Find Printer/PDFDocument usage
grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" .
# Find COM interop references
grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" .
# Find configuration settings
grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" .
Mudanças significativas a serem previstas
| Padrão SDK de PDF fácil | Alteração necessária |
|---|---|
new Printer() |
Use ChromePdfRenderer |
PrintOfficeDocToPDF() |
A conversão do escritório foi tratada de forma diferente. |
RenderHTMLToPDF() |
RenderHtmlAsPdf() |
| Referências de interoperabilidade COM | Remover completamente |
| Configuração do driver da impressora | Não é necessário |
BeginPrintToFile() callbacks |
assíncrono/await nativo |
| Requisitos da sessão interativa | Executa sem monitor |
| indexação de páginas baseada em 1 | indexação baseada em 0 |
| Tempo limite em segundos | Tempo limite em milissegundos |
Processo de migração passo a passo
Passo 1: Remova o Easy PDF SDK
O SDK de PDF fácil é normalmente instalado por meio do instalador MSI, referências manuais de DLL ou registro no GAC. Remover todas as referências:
- Desinstale o BCL EasyPDF SDK em Programas e Recursos.
- Remova as referências de DLL do seu projeto.
- Remover referências de interoperabilidade COM
- Limpe as entradas do GAC, se presentes.
Passo 2: Instale o IronPDF
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Ou através do Console do Gerenciador de Pacotes:
Install-Package IronPdf
Etapa 3: Atualizar referências de namespace
Substitua os namespaces do SDK de PDF fácil pelo IronPDF:
// Remove these
using BCL.easyPDF;
using BCL.easyPDF.Interop;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.Printer;
// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using BCL.easyPDF;
using BCL.easyPDF.Interop;
using BCL.easyPDF.PDFConverter;
using BCL.easyPDF.Printer;
// Add these
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
Referência completa para migração de API
Mapeamento de Classes Principais
| Classe SDK de PDF fácil | Equivalente ao IronPDF |
|---|---|
Printer |
ChromePdfRenderer |
PDFDocument |
PdfDocument |
HTMLConverter |
ChromePdfRenderer |
PrinterConfiguration |
ChromePdfRenderOptions |
PageOrientation |
PdfPaperOrientation |
PageSize |
PdfPaperSize |
SecurityHandler |
PdfDocument.SecuritySettings |
Métodos de criação de PDFs
| Método fácil para o SDK de PDF | Método IronPDF |
|---|---|
printer.RenderHTMLToPDF(html, path) |
renderer.RenderHtmlAsPdf(html).SaveAs(path) |
printer.RenderUrlToPDF(url, path) |
renderer.RenderUrlAsPdf(url).SaveAs(path) |
htmlConverter.ConvertHTML(html, doc) |
renderer.RenderHtmlAsPdf(html) |
htmlConverter.ConvertURL(url, doc) |
renderer.RenderUrlAsPdf(url) |
Métodos de manipulação de PDF
| Método fácil para o SDK de PDF | Método IronPDF |
|---|---|
doc.Append(doc2) |
PdfDocument.Merge(pdf1, pdf2) |
doc.ExtractPages(start, end) |
pdf.CopyPages(start, end) |
doc.DeletePage(index) |
pdf.RemovePage(index) |
doc.GetPageCount() |
pdf.PageCount |
doc.Save(path) |
pdf.SaveAs(path) |
doc.Close() |
pdf.Dispose() ou using |
doc.ExtractText() |
pdf.ExtractAllText() |
Opções de configuração
| Opção SDK de PDF fácil | Opção IronPDF |
|---|---|
config.TimeOut |
RenderingOptions.Timeout |
config.PageOrientation = Landscape |
RenderingOptions.PaperOrientation = Landscape |
config.PageSize = A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
config.MarginTop/Bottom/Left/Right |
RenderingOptions.MarginTop, etc. |
Exemplos de migração de código
String HTML para PDF
Implementação simplificada do SDK para PDF:
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
pdf.Save("output.pdf");
pdf.Close();
}
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf);
pdf.Save("output.pdf");
pdf.Close();
}
}
Imports BCL.EasyPDF
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PDFDocument()
Dim htmlConverter As New HTMLConverter()
htmlConverter.ConvertHTML("<h1>Hello World</h1>", pdf)
pdf.Save("output.pdf")
pdf.Close()
End Sub
End Class
Implementação do IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF elimina a classe separada HTMLConverter e as chamadas manuais Close()—resultando em um código mais limpo e de mais fácil manutenção.
Conversão de URL para PDF
Implementação simplificada do SDK para PDF:
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertURL("https://example.com", pdf);
pdf.Save("webpage.pdf");
pdf.Close();
}
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;
class Program
{
static void Main()
{
var pdf = new PDFDocument();
var htmlConverter = new HTMLConverter();
htmlConverter.ConvertURL("https://example.com", pdf);
pdf.Save("webpage.pdf");
pdf.Close();
}
}
Imports BCL.EasyPDF
Imports System
Module Program
Sub Main()
Dim pdf As New PDFDocument()
Dim htmlConverter As New HTMLConverter()
htmlConverter.ConvertURL("https://example.com", pdf)
pdf.Save("webpage.pdf")
pdf.Close()
End Sub
End Module
Implementação do IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
Unir vários PDFs
Implementação simplificada do SDK para PDF:
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;
class Program
{
static void Main()
{
var pdf1 = new PDFDocument("document1.pdf");
var pdf2 = new PDFDocument("document2.pdf");
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
// NuGet: Install-Package BCL.EasyPDF
using BCL.EasyPDF;
using System;
class Program
{
static void Main()
{
var pdf1 = new PDFDocument("document1.pdf");
var pdf2 = new PDFDocument("document2.pdf");
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
Imports BCL.EasyPDF
Imports System
Module Program
Sub Main()
Dim pdf1 As New PDFDocument("document1.pdf")
Dim pdf2 As New PDFDocument("document2.pdf")
pdf1.Append(pdf2)
pdf1.Save("merged.pdf")
pdf1.Close()
pdf2.Close()
End Sub
End Module
Implementação do IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim pdfs = New List(Of PdfDocument) From {
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
}
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
End Sub
End Class
O método estático Merge do IronPDF aceita vários documentos diretamente, eliminando o padrão de loop manual Append.
Proteção por senha
Implementação do IronPDF :
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")
' Set security
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit
pdf.SaveAs("protected.pdf")
Cabeçalhos e rodapés
O SDK de PDF fácil não possui suporte nativo para cabeçalho/rodapé — cabeçalhos e rodapés devem ser incluídos no HTML de origem. O IronPDF oferece funcionalidades dedicadas:
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px; font-family:Arial;'>
Company Name - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px; font-family:Arial;'>
Company Name - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:12px; font-family:Arial;'>
Company Name - Confidential
</div>",
.DrawDividerLine = True,
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
.DrawDividerLine = True,
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>")
pdf.SaveAs("with_headers.pdf")
Para mais opções, consulte a documentação sobre cabeçalhos e rodapés .
Geração assíncrona de PDF
O SDK de PDF fácil utiliza padrões assíncronos baseados em callbacks. O IronPDF oferece suporte nativo a async/await:
Implementação simplificada do SDK para PDF:
using BCL.easyPDF;
Printer printer = new Printer();
// BCL uses callback-based async
printer.BeginPrintToFile(
"https://example.com",
"output.pdf",
OnPrintComplete,
OnPrintError
);
Console.ReadLine();
printer.Dispose();
using BCL.easyPDF;
Printer printer = new Printer();
// BCL uses callback-based async
printer.BeginPrintToFile(
"https://example.com",
"output.pdf",
OnPrintComplete,
OnPrintError
);
Console.ReadLine();
printer.Dispose();
Imports BCL.easyPDF
Dim printer As New Printer()
' BCL uses callback-based async
printer.BeginPrintToFile( _
"https://example.com", _
"output.pdf", _
AddressOf OnPrintComplete, _
AddressOf OnPrintError _
)
Console.ReadLine()
printer.Dispose()
Implementação do IronPDF :
using IronPdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var renderer = new ChromePdfRenderer();
// Native async/await
var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
await pdf.SaveAsAsync("output.pdf");
Console.WriteLine("PDF created: output.pdf");
}
}
using IronPdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var renderer = new ChromePdfRenderer();
// Native async/await
var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com");
await pdf.SaveAsAsync("output.pdf");
Console.WriteLine("PDF created: output.pdf");
}
}
Imports IronPdf
Imports System.Threading.Tasks
Class Program
Shared Async Function Main() As Task
Dim renderer = New ChromePdfRenderer()
' Native async/await
Dim pdf = Await renderer.RenderUrlAsPdfAsync("https://example.com")
Await pdf.SaveAsAsync("output.pdf")
Console.WriteLine("PDF created: output.pdf")
End Function
End Class
Notas críticas sobre migração
Alteração do índice da página
O SDK de PDF fácil utiliza indexação baseada em 1. O IronPDF utiliza indexação baseada em zero:
// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);
// IronPDF: 0-based
pdf.CopyPages(0, 4);
// Easy PDF SDK: 1-based
doc.ExtractPages(1, 5);
// IronPDF: 0-based
pdf.CopyPages(0, 4);
' Easy PDF SDK: 1-based
doc.ExtractPages(1, 5)
' IronPDF: 0-based
pdf.CopyPages(0, 4)
Tempo limite em milissegundos
O SDK de PDF fácil usa segundos para os valores de tempo limite. O IronPDF usa milissegundos:
// Easy PDF SDK: seconds
config.TimeOut = 120;
// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
// Easy PDF SDK: seconds
config.TimeOut = 120;
// IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000;
' Easy PDF SDK: seconds
config.TimeOut = 120
' IronPDF: milliseconds
renderer.RenderingOptions.Timeout = 120000
Integração com ASP.NET Core
O SDK de PDF fácil apresenta dificuldades em contextos web devido aos requisitos de sessão interativa.
Padrão IronPDF :
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Function GeneratePdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
<HttpGet("generate-async")>
Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")
Return File(pdf.Stream, "application/pdf", "report.pdf")
End Function
End Class
Implantação do Docker
O SDK de PDF fácil não funciona em contêineres Docker — ele requer contêineres Windows, Microsoft Office, drivers de impressora virtual e sessões de desktop interativas. Isso é fundamentalmente incompatível com a conteinerização.
Configuração do IronPDF no Docker:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# Install Chromium dependencies
RUN apt-get update && apt-get install -y \
libc6 libgdiplus libx11-6 libxcomposite1 \
libxdamage1 libxrandr2 libxss1 libxtst6 \
libnss3 libatk-bridge2.0-0 libgtk-3-0 \
libgbm1 libasound2 fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "MyApp.dll"]
Solução de problemas comuns de migração
Problema: Impressora não encontrada
Sintoma: Cannot find printer: BCL easyPDF Printer
Solução: O IronPDF não precisa de drivers de impressora:
// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
// Just use the renderer directly
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
Problema: Erros de interoperabilidade COM
Sintoma: erros DLL error loading ou RCW
Solução: Remova todas as referências COM e utilize a API gerenciada do IronPDF.
Problema: Tempo limite excedido no servidor
Sintoma: A geração de PDFs trava no servidor web.
Solução: O IronPDF funciona sem interface gráfica, dispensando sessões interativas:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60000; // Reliable timeout
var pdf = renderer.RenderHtmlAsPdf(html);
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.Timeout = 60000 ' Reliable timeout
Dim pdf = renderer.RenderHtmlAsPdf(html)
Problema: O fundo não está sendo impresso.
Sintoma: Ausência de fundos CSS
Solução: Ativar a impressão em segundo plano:
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Lista de verificação pós-migração
Após concluir a migração do código, verifique o seguinte:
- Verifique a qualidade da saída em PDF com o mecanismo Chromium do IronPDF.
- Teste todos os casos extremos com HTML/CSS complexo
- Validar se a implantação do servidor funciona sem sessões interativas.
- Testar a implantação de contêineres/Docker
- Remover o instalador do BCL EasyPDF da implantação
- Remover a instalação do Office dos servidores (não é mais necessária)
- Atualize os pipelines de CI/CD com o novo pacote NuGet.
Preparando sua infraestrutura de PDF para o futuro
Com o .NET 10 no horizonte e o C# 14 introduzindo novos recursos de linguagem, escolher uma biblioteca PDF multiplataforma garante a compatibilidade com os modelos de implantação em constante evolução. O suporte do IronPDF para Linux, Docker e arquiteturas nativas da nuvem significa que seu investimento em migração se paga à medida que os projetos se estendem até 2025 e 2026 — sem as restrições exclusivas do Windows do Easy PDF SDK.
Recursos adicionais
- Documentação do IronPDF
- Tutoriais de HTML para PDF
- Referência da API
- Pacote NuGet
- Opções de licenciamento
A migração do SDK de PDF fácil para o IronPDF elimina as dependências de impressoras virtuais, problemas de interoperabilidade COM e restrições exclusivas do Windows. A transição para a renderização baseada no Chromium oferece suporte superior a CSS3 e JavaScript , além de permitir a implantação em ambientes Docker, Kubernetes e em nuvem, algo que antes era impossível com a arquitetura legada do Easy PDF SDK.

