IRONSOFTWAREHOME
VÍDEOS

Como converter DOCX para PDF usando C#

Curtis Chau
Curtis Chau
Updated: 18 de maio de 2026

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.254 podem 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:

AspectoHaukcode.DinkToPdfIronPDF
Motor subjacentewkhtmltopdf (fork QtWebKit, cerca de 2015)Cromo moderno
Estado de segurançaaviso CVE-2022-35583 (não corrigido / disputado upstream)Nenhum CVE crítico conhecido
Status do projetoFork comunitário; wkhtmltopdf upstream arquivadoMantido ativamente
HTML5/CSS3Nenhum Flexbox/Grid modernoCSS3 completo
JavaScriptLimitado, inconsistenteSuporte total
Binários nativoslibwkhtmltox.dll/.so/.dylib por plataformaPacote NuGet gerenciado
Segurança da roscaSynchronizedConverter serializa chamadasProjetado para ser seguro contra roscas.
ApoiarComunidadeSuporte 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çaLGPL-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
SHELL

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
SHELL

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

Etapa 4: Inicializar a licença

Adicionar inicialização de licença na inicialização do aplicativo:

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

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

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

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

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

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

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.DinkToPdfIronPDF
SynchronizedConverterChromePdfRenderer
BasicConverterChromePdfRenderer
PdfToolsN / D
IConverterN / D

Mapeamento de Configuração de Documentos

Haukcode.DinkToPdfIronPDF
HtmlToPdfDocumentChamada de método
GlobalSettingsRenderingOptions
ObjectSettingsRenderingOptions
converter.Convert(doc)renderer.RenderHtmlAsPdf(html)

Mapeamento de propriedades do GlobalSettings

Propriedade GlobalSettingsPropriedade IronPDF
ColorModeRenderingOptions.GrayScale
OrientationRenderingOptions.PaperOrientation
PaperSizeRenderingOptions.PaperSize
Margins.TopRenderingOptions.MarginTop
Margins.BottomRenderingOptions.MarginBottom
Margins.LeftRenderingOptions.MarginLeft
Margins.RightRenderingOptions.MarginRight

Mapeamento de propriedades de configurações de objeto

Propriedade ObjectSettingsEquivalente ao IronPDF
HtmlContentPrimeiro 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.DinkToPdfIronPDF
[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!

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

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

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" .
SHELL

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

  1. Remova os pacotes NuGet do DinkToPdf
  2. Instale o pacote NuGet do IronPDF
  3. Atualize as importações de namespace de DinkToPdf para IronPdf
  4. Substitua SynchronizedConverter por ChromePdfRenderer
  5. Converta padrões HtmlToPdfDocument para chamadas de método diretas
  6. Converta GlobalSettings para RenderingOptions
  7. Converta ObjectSettings para RenderingOptions
  8. Atualize a sintaxe do placeholder ([page]{page}, [toPage]{total-pages})
  9. Adicionar inicialização da licença do IronPDF na inicialização do sistema.

Tarefas de limpeza de infraestrutura

  1. Exclua os binários nativos (libwkhtmltox.*)
  2. Remover o código de carregamento da biblioteca nativa
  3. Remova o CustomAssemblyLoadContext, se presente.
  4. Atualizar Injeção de Dependência (singleton não é mais necessário)
  5. 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.

Observe: DinkToPdf, Haukcode.DinkToPdf, Haukcode.WkHtmlToPdfDotNet, e wkhtmltopdf são marcas registradas ou nomes de produtos de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por nenhum desses projetos. 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.