Migrando de Haukcode.DinkToPdf para IronPDF
Haukcode.DinkToPdf é um fork comunitário da outrora popular biblioteca DinkToPdf, que envolve o binário wkhtmltopdf para converter HTML em PDF para aplicativos .NET. O fork foi posteriormente renomeado para Haukcode.WkHtmlToPdfDotNet, com o último lançamento 1.5.95 publicado em 22 de outubro de 2024 sob LGPL-3.0-or-later. Embora o fork tenha mantido o pacote vivo no NuGet após o original DinkToPdf (1.0.8, 18 de abril de 2017) ter sido abandonado, ele ainda se vincula ao mesmo binário wkhtmltopdf arquivado que seu pai. O repositório wkhtmltopdf/wkhtmltopdf foi arquivado em 2 de janeiro de 2023, e toda a organização wkhtmltopdf no GitHub foi arquivada em 10 de julho de 2024, portanto, problemas de upstream não serão corrigidos.
Este guia oferece um caminho de migração de Haukcode.DinkToPdf / Haukcode.WkHtmlToPdfDotNet para IronPDF, incluindo instruções passo a passo, comparações de código e exemplos práticos para desenvolvedores .NET que buscam substituir o binário wkhtmltopdf arquivado.
Conselho de Segurança: CVE-2022-35583
Haukcode.DinkToPdf herda um aviso de segurança levantado contra seu binário wkhtmltopdf upstream:
CVE-2022-35583 — Aviso SSRF contra wkhtmltopdf 0.12.6
Um aviso de Request Forgery Server-Side foi publicado contra o wkhtmltopdf 0.12.6 (CVSS 9.8 no NVD; disputado pelo projeto upstream wkhtmltopdf, que vê isso como um problema de sanitização de entrada no lado do aplicativo, em vez de um bug na biblioteca). De qualquer forma, não será corrigido — o upstream está arquivado. Padrões típicos de exposição destacados em discussões públicas incluem:
- Vetor de Ataque: Conteúdo HTML não confiável pode fazer o renderizador buscar recursos internos durante a conversão
- Metadata da AWS: Solicitações para
http://169.254.169.254podem retornar metadados da instância se o processador funcionar no EC2 - Acesso à Rede Interna: Serviços internos podem estar acessíveis a partir do host de renderização
- Inclusão de Arquivo Local: Arquivos locais podem ser lidos via o protocolo
file://
Nenhum patch a upstream é esperado — o repositório do wkhtmltopdf foi arquivado em 2 de janeiro de 2023, com o último lançamento (0.12.6) em junho de 2020.
IronPDF vs Haukcode.DinkToPdf: Comparação de Recursos
Compreender as diferenças arquitetônicas ajuda os responsáveis pelas decisões técnicas a avaliar o investimento em migração:
| Aspecto | Haukcode.DinkToPdf | IronPDF |
|---|---|---|
| Motor subjacente | wkhtmltopdf (fork QtWebKit, cerca de 2015) | Cromo moderno |
| Estado de segurança | aviso CVE-2022-35583 (não corrigido / disputado upstream) | Nenhum CVE crítico conhecido |
| Status do projeto | Fork comunitário; wkhtmltopdf upstream arquivado | Mantido ativamente |
| HTML5/CSS3 | Nenhum Flexbox/Grid moderno | CSS3 completo |
| JavaScript | Limitado, inconsistente | Suporte total |
| Binários nativos | libwkhtmltox.dll/.so/.dylib por plataforma |
Pacote NuGet gerenciado |
| Segurança da rosca | SynchronizedConverter serializa chamadas |
Projetado para ser seguro contra roscas. |
| Apoiar | Comunidade | Suporte profissional |
| Atualizações | Último lançamento do fork 1.5.95 (22 de outubro de 2024); wkhtmltopdf upstream 0.12.6 (junho de 2020) | Lançamentos regulares |
| Licença | LGPL-3.0-ou-posterior (fork) / MIT (DinkToPdf original) | Comercial com período de teste gratuito |
Guia rápido: Migração de Haukcode.DinkToPdf para IronPDF
A migração pode começar imediatamente com esses passos fundamentais.
Passo 1: Remova o DinkToPdf e os binários nativos.
Remova os pacotes NuGet Haukcode.DinkToPdf:
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
# Remove NuGet packages
dotnet remove package DinkToPdf
dotnet remove package Haukcode.DinkToPdf
dotnet remove package Haukcode.WkHtmlToPdf-DotNet
Exclua os binários nativos do seu projeto:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Passo 2: Instale o IronPDF
# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
Etapa 3: Atualizar Namespaces
Substitua os namespaces do DinkToPdf pelo IronPDF:
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
// Before (Haukcode.DinkToPdf)
using DinkToPdf;
using DinkToPdf.Contracts;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering; // For RenderingOptions
Imports IronPdf
Imports IronPdf.Rendering
Etapa 4: Inicializar a licença
Adicionar inicialização de licença na inicialização do aplicativo:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Exemplos de migração de código
Conversão básica de HTML para PDF
A operação mais fundamental revela a diferença de complexidade entre essas bibliotecas PDF do .NET .
Abordagem Haukcode.DinkToPdf:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Hello World</h1></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Hello World</h1></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Module
Abordagem IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System.IO
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1></body></html>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Haukcode.DinkToPdf requer a criação de um SynchronizedConverter com PdfTools, construir um HtmlToPdfDocument com GlobalSettings e Objects aninhados, adicionar um ObjectSettings com HtmlContent, chamar converter.Convert() para obter bytes brutos e escrever manualmente em um arquivo com File.WriteAllBytes().
IronPDF simplifica isso em três linhas: criar um ChromePdfRenderer, chamar RenderHtmlAsPdf(), e usar o método embutido SaveAs().
Para cenários avançados de conversão de HTML para PDF, consulte o guia de conversão de HTML para PDF .
Converter URLs em PDF
A conversão de URL para PDF mostra diferenças de padrão semelhantes.
Abordagem Haukcode.DinkToPdf:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.Page = "https://www.example.com"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Module
Abordagem 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
Haukcode.DinkToPdf usa o mesmo padrão de construção de documento com ObjectSettings.Page para URLs.IronPDF oferece um método dedicado RenderUrlAsPdf() que expressa claramente a intenção.
Consulte a documentação sobre URLs para PDF para obter informações sobre autenticação e opções de cabeçalho personalizadas.
Configurações de página personalizadas
Configurar a orientação, o tamanho do papel e as margens requer abordagens diferentes.
Abordagem Haukcode.DinkToPdf:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.Letter,
Margins = new MarginSettings() { Top = 10, Bottom = 10, Left = 10, Right = 10 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("landscape.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Landscape,
.PaperSize = PaperKind.Letter,
.Margins = New MarginSettings() With {.Top = 10, .Bottom = 10, .Left = 10, .Right = 10}
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("landscape.pdf", pdf)
End Sub
End Module
Abordagem IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 10;
renderer.RenderingOptions.MarginRight = 10;
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>");
pdf.SaveAs("landscape.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 10
renderer.RenderingOptions.MarginRight = 10
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Landscape Document</h1><p>Custom page settings</p></body></html>")
pdf.SaveAs("landscape.pdf")
End Sub
End Class
Haukcode.DinkToPdf aninha configurações dentro de GlobalSettings com um objeto separado MarginSettings.IronPDF fornece propriedades diretas de RenderingOptions com nomes claros como PaperSize, PaperOrientation, e propriedades de margem individuais.
Referência de mapeamento da API Haukcode.DinkToPdf para IronPDF
Este mapeamento acelera a migração ao mostrar equivalentes diretos da API:
Mapeamento de Classe de Conversão
| Haukcode.DinkToPdf | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
BasicConverter |
ChromePdfRenderer |
PdfTools |
N / D |
IConverter |
N / D |
Mapeamento de Configuração de Documentos
| Haukcode.DinkToPdf | IronPDF |
|---|---|
HtmlToPdfDocument |
Chamada de método |
GlobalSettings |
RenderingOptions |
ObjectSettings |
RenderingOptions |
converter.Convert(doc) |
renderer.RenderHtmlAsPdf(html) |
Mapeamento de propriedades do GlobalSettings
| Propriedade GlobalSettings | Propriedade IronPDF |
|---|---|
ColorMode |
RenderingOptions.GrayScale |
Orientation |
RenderingOptions.PaperOrientation |
PaperSize |
RenderingOptions.PaperSize |
Margins.Top |
RenderingOptions.MarginTop |
Margins.Bottom |
RenderingOptions.MarginBottom |
Margins.Left |
RenderingOptions.MarginLeft |
Margins.Right |
RenderingOptions.MarginRight |
Mapeamento de propriedades de configurações de objeto
| Propriedade ObjectSettings | Equivalente ao IronPDF |
|---|---|
HtmlContent |
Primeiro parâmetro para RenderHtmlAsPdf() |
Page (URL) |
renderer.RenderUrlAsPdf(url) |
HeaderSettings.Right = "[page]" |
{page} dentro de HtmlHeader.HtmlFragment |
Migração de sintaxe de espaço reservado
| Haukcode.DinkToPdf | IronPDF |
|---|---|
[page] |
{page} |
[toPage] |
{total-pages} |
[date] |
{date} |
Problemas e soluções comuns em migrações
Problema 1: Requisito de Singleton
Haukcode.DinkToPdf: Requer SynchronizedConverter como um singleton devido a problemas de segurança de thread com o binário nativo wkhtmltopdf.
Solução: O ChromePdfRenderer do IronPDF é seguro para threads por design—nenhum singleton necessário:
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
// Before (DinkToPdf) - MUST be singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
// After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton<IPdfService, IronPdfService>();
// Or services.AddTransient<IPdfService, IronPdfService>() - both are safe!
' Before (DinkToPdf) - MUST be singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))
' After (IronPDF) - Can be singleton or transient (both work)
services.AddSingleton(Of IPdfService, IronPdfService)()
' Or services.AddTransient(Of IPdfService, IronPdfService)() - both are safe!
Problema 2: Dependências binárias nativas
Haukcode.DinkToPdf: Requer bibliotecas nativas específicas da plataforma (libwkhtmltox.dll/so/dylib).
Solução: O IronPDF é autossuficiente e não possui dependências binárias nativas. Exclua estes arquivos após a migração:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
Questão 3: Diferenças nos tipos de retorno
Haukcode.DinkToPdf: converter.Convert() returns byte[] directly.
Solução:IronPDF retorna um objeto PdfDocument com múltiplas opções de saída:
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] bytes = pdf.BinaryData; // Get bytes
pdf.SaveAs("output.pdf"); // Or save directly
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim bytes As Byte() = pdf.BinaryData ' Get bytes
pdf.SaveAs("output.pdf") ' Or save directly
Problema 4: Sintaxe de espaço reservado para cabeçalho/rodapé
Haukcode.DinkToPdf: Usa sintaxe de colchetes como [page] e [toPage].
Solução: Atualize os marcadores de posição para chaves do IronPDF:
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};
// Before (DinkToPdf)
HeaderSettings = { Right = "Page [page] of [toPage]" }
// After (IronPDF)
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
};
' Before (DinkToPdf)
HeaderSettings = New With {.Right = "Page [page] of [toPage]"}
' After (IronPDF)
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "<span style='float:right'>Page {page} of {total-pages}</span>"
}
Lista de verificação para migração de Haukcode.DinkToPdf
Tarefas pré-migração
Faça uma auditoria em seu código-fonte para identificar todos os usos do DinkToPdf:
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
# Find DinkToPdf namespace usage
grep -r "using DinkToPdf\|using Haukcode" --include="*.cs" .
# Find converter usage
grep -r "SynchronizedConverter\|BasicConverter\|HtmlToPdfDocument" --include="*.cs" .
# Find native library loading
grep -r "wkhtmltopdf\|libwkhtmltox" --include="*.cs" --include="*.csproj" .
# Find GlobalSettings/ObjectSettings usage
grep -r "GlobalSettings\|ObjectSettings\|MarginSettings" --include="*.cs" .
Documente a configuração atual de GlobalSettings e ObjectSettings. Identifique qualquer código de carregamento de biblioteca nativa que possa ser removido.
Tarefas de atualização de código
- Remova os pacotes NuGet do DinkToPdf
- Instale o pacote NuGet do IronPDF
- Atualize as importações de namespace de
DinkToPdfparaIronPdf - Substitua
SynchronizedConverterporChromePdfRenderer - Converta padrões
HtmlToPdfDocumentpara chamadas de método diretas - Converta
GlobalSettingsparaRenderingOptions - Converta
ObjectSettingsparaRenderingOptions - Atualize a sintaxe do placeholder (
[page]→{page},[toPage]→{total-pages}) - Adicionar inicialização da licença do IronPDF na inicialização do sistema.
Tarefas de limpeza de infraestrutura
- Exclua os binários nativos (libwkhtmltox.*)
- Remover o código de carregamento da biblioteca nativa
- Remova o CustomAssemblyLoadContext, se presente.
- Atualizar Injeção de Dependência (singleton não é mais necessário)
- Remover o código de detecção de plataforma para binários nativos
Testes pós-migração
Após a migração, verifique os seguintes aspectos:
- Teste de conversão de HTML para PDF
- Teste de conversão de URL para PDF
- Verificar as configurações da página (tamanho, orientação, margens)
- Verificar cabeçalhos e rodapés com marcadores de posição
- Teste com modelos HTML reais
- Teste de desempenho sob carga
Principais benefícios da migração para o IronPDF
A migração do Haukcode.DinkToPdf para o IronPDF oferece diversas vantagens importantes:
Segurança: Elimina a vulnerabilidade CVE-2022-35583 (SSRF) e outras vulnerabilidades do wkhtmltopdf que nunca serão corrigidas.
Mecanismo de renderização moderno: utiliza o Chromium, que recebe atualizações constantes, em vez do Qt WebKit, abandonado em 2015. Suporte completo a HTML5, CSS3 e JavaScript .
Sem binários nativos: Biblioteca autocontida, sem DLLs específicas da plataforma para gerenciar. Simplifica a implementação em Windows, Linux e macOS.
Segurança de Thread: Nenhum requisito de singleton—utilize ChromePdfRenderer livremente em qualquer padrão, incluindo instância por pedido.
API Simples: Chamadas de método diretas (RenderHtmlAsPdf(), RenderUrlAsPdf()) em vez de construção complexa de objeto de documento.
Desenvolvimento Ativo: A cadência regular de lançamentos do IronPDF o mantém compatível com as versões atuais do .NET, incluindo .NET Framework 4.6.2+, .NET Core 3.1+, e .NET 5/6/7/8/9/10.

