IRONSOFTWAREHOME
VÍDEOS

Como incorporar caracteres UTF-8 em arquivos PDF usando C#

Curtis Chau
Curtis Chau
Updated: 19 de julho de 2026

Migrar doPDF Duo .NETpara o IronPDF move o seu fluxo de trabalho PDF .NET de uma biblioteca de nicho, pouco documentada, sem lançamentos recentes, para uma solução estável, bem documentada e ativamente mantida. Este guia fornece um caminho de migração passo a passo que aborda os riscos de depender de um componente inativo enquanto ganha acesso a recursos que a API documentada do PDF Duo não cobre.

Por que migrar do PDF Duo para o IronPDF?

O Problema de Risco do PDF Duo

PDF Duo .NET (DuoDimension Software) é um componente de HTML para PDF de nicho para .NET. Embora possa ter atraído equipes que procuram um DLL auto-contido, várias características o tornam uma escolha inadequada para aplicações de produção atuais:

  1. Vendedor e Proveniência: Publicado por DuoDimension Software (duodimension.com), um pequeno ISV sem roteiro público e sem repositório GitHub.

  2. Documentação Escassa: Uma página de produto do fornecedor, alguns trechos de exemplo e um release de imprensa de 2010. Nenhum site de referência da API e nenhuma presença significativa no Stack Overflow.

  3. Efetivamente Abandonado: Última versão pública é v2.4, datado de 10 de dezembro de 2010 — cerca de 15 anos sem uma nova versão.

  4. Superfície Documentada Restrita: A API pública é essencialmente DuoDimension.HtmlToPdf com OpenHTML(...) e SavePDF(...). Não há API nativa documentada para marca d'água, criptografia, assinatura, preenchimento de formulário, extração de texto ou fusão de PDF.

  5. Motor de Renderização Não Divulgado: Materiais do fornecedor descrevem um componente auto-contido sem dependência de Office ou Acrobat, mas não publicam qual motor HTML/CSS é usado. CSS3, JavaScript moderno, fontes web e layout em flex/grelha não são reivindicados.

  6. Alvo .NET Pré-moderno: Suporte documentado é .NET Framework 1.1 até 3.5 no Windows XP / Vista / 7 / 2000 / 2003. Nenhum suporte documentado para .NET Framework 4.x, .NET Core, .NET 5+, Linux ou Docker.

Comparação entre PDF Duo e IronPDF

AspectoPDF Duo .NETIronPDF
Última versãov2.4 (dezembro de 2010)Ativo, lançamentos regulares
DistribuiçãoDownload de DLL de duodimension.com (sem NuGet)NuGet IronPdf
Suporte de tempo de execução.NET Framework 1.1 – 3.5, somente Windows.NET FX 4.6.2+, .NET 6/7/8/9/10, Linux, macOS, Docker
DocumentaçãoUma página de produto do fornecedorDocumentação abrangente + referência de API
ApoiarNenhum visívelEquipe de suporte profissional
ComunidadeNegligenciávelMais de 41 milhões de downloads do NuGet (pilha Iron Software)
RenderizaçãoMotor não divulgadoCromo moderno
CaracterísticasApenas HTML para PDFHTML para PDF, fusão, segurança, assinaturas, OCR, formulários, marcas d'água
LicenciamentoPor página de preços do fornecedorComercial, perpétua ou por assinatura

Para equipes no .NET moderno,IronPDF fornece uma fundação estável com desenvolvimento ativo e documentação abrangente no lugar de um componente cuja última versão publicada foi v2.4 em dezembro de 2010.


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

Mudanças de Pacote / Referência

PDF Duo .NET is not distributed via NuGet. Removê-lo é um passo manual:

# In Visual Studio: References -> remove PDFDuo.dll (and any associated
# PDF Duo files) and delete the vendored binary from your /lib folder.

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuração de licença

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Identificar o uso do PDF Duo

# Find all PDF Duo references
grep -r "DuoDimension\|HtmlToPdf\b\|OpenHTML\|SavePDF" --include="*.cs" .
SHELL

Referência de API

O namespace raiz documentado do fornecedor é DuoDimension. A superfície pública é essencialmente a classe HtmlToPdf com OpenHTML(...) e SavePDF(...). Sub-namespaces mostrados abaixo para IronPDF refletem a estrutura do IronPDF;PDF Duo .NETdoes not document sub-namespaces.

Alterações de namespace

PDF Duo .NETIronPDF
using DuoDimension;using IronPdf;
_ (sem sub-namespaces documentados) _using IronPdf.Rendering;

Mapeamentos de conversão de HTML para PDF

PDF Duo .NETIronPDF
new DuoDimension.HtmlToPdf()new ChromePdfRenderer()
conv.OpenHTML(htmlFile); conv.SavePDF(path);renderer.RenderHtmlFileAsPdf(htmlFile).SaveAs(path)
conv.OpenHTML(url); conv.SavePDF(path);renderer.RenderUrlAsPdf(url).SaveAs(path)
(escrever string para temp .html, depois OpenHTML)renderer.RenderHtmlAsPdf(html).SaveAs(path)

Mapeamentos de configuração de página

DuoDimension.HtmlToPdf não documenta um objeto de configurações para tamanho de papel, orientação ou margens. A coluna IronPDF abaixo mostra os equivalentes explícitos RenderingOptions.

PDF Duo .NETIronPDF
_ (sem opção de tamanho de página documentada)_RenderingOptions.PaperSize = PdfPaperSize.A4
_ (sem opção de tamanho de página documentada)_RenderingOptions.PaperSize = PdfPaperSize.Letter
_ (sem opção de orientação documentada)_RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
_ (sem objeto de margens documentado)_Propriedades de margem individuais

Mapeamentos de Margens

PDF Duo .NETIronPDF
_ (sem objeto de margens documentado)_Propriedades individuais
(sem equivalente)RenderingOptions.MarginTop
(sem equivalente)RenderingOptions.MarginRight
(sem equivalente)RenderingOptions.MarginBottom
(sem equivalente)RenderingOptions.MarginLeft

Mapeamentos de operações de documentos

PDF Duo .NET é um conversor de HTML para PDF apenas. A página do produto do fornecedor não documenta APIs de carga, byte ou mesclagem em DuoDimension.HtmlToPdf. As linhas abaixo mostram o que as equipes geralmente buscavam em bibliotecas adjacentes ao usar o PDF Duo, e a chamada IronPDF que consolida esse trabalho.

NecessidadePDF Duo .NETIronPDF
Carregar PDF existentenão nativo — combina com iTextSharp 4.x ou similarPdfDocument.FromFile(path)
Salvar PDFconv.SavePDF(path)pdf.SaveAs(path)
Obter bytes de PDFnot nativepdf.BinaryData
Mesclar PDFsnão nativo — combina com iTextSharp 4.x ou similarPdfDocument.Merge(pdf1, pdf2)

Novos Recursos Não Disponíveis na API Documentada do PDF Duo

RecursoIronPDF
Cabeçalhos/RodapésRenderingOptions.HtmlHeader, HtmlFooter
Números de página{page}, placeholders {total-pages}
Marcas d'águapdf.ApplyWatermark(html)
Proteção por senhapdf.SecuritySettings
Preenchimento de formuláriopdf.Form.Fields
Assinaturas digitaispdf.SignWithFile()
Extração de textopdf.ExtractAllText()
PDF para imagempdf.RasterizeToImageFiles()

Exemplos de migração de código

Exemplo 1: Conversão de HTML para PDF

Antes (PDF Duo):

//PDF Duo .NETis not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        // OpenHTML accepts a file path, URL, or stream; there is no documented
        // "convert HTML string" call, so write the markup to a temp file first.
        var tempHtml = Path.GetTempFileName() + ".html";
        File.WriteAllText(tempHtml, "<h1>Hello World</h1><p>This is a PDF document.</p>");

        var conv = new HtmlToPdf();
        conv.OpenHTML(tempHtml);
        conv.SavePDF("output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}
C#

Após (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}

A diferença fundamental aqui reside no padrão da API. O HtmlToPdf.OpenHTML(...) do PDF Duo aceita um caminho de arquivo, URL ou stream — ele não documenta uma chamada "renderizar esta string HTML", então as equipes escrevem a marcação para um arquivo temporário primeiro e depois chamam SavePDF(path) para gravar no disco. O ChromePdfRenderer.RenderHtmlAsPdf() do IronPDF renderiza a string diretamente e retorna um objeto PdfDocument, que você então salva com SaveAs().

Esta abordagem orientada a objetos proporciona flexibilidade adicional: você pode manipular o PDF (adicionar marcas d'água, mesclar documentos, adicionar segurança, extrair texto) antes de salvar — nada disso faz parte da API documentada do PDF Duo .NET. Consulte a documentação de conversão de HTML para PDF para obter opções de renderização adicionais.

Exemplo 2: Conversão de URL para PDF

Antes (PDF Duo):

//PDF Duo .NETis not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;

class Program
{
    static void Main()
    {
        var conv = new HtmlToPdf();
        conv.OpenHTML("https://www.example.com");
        conv.SavePDF("webpage.pdf");
        Console.WriteLine("Webpage converted to PDF!");
    }
}
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");
        Console.WriteLine("Webpage converted to PDF!");
    }
}

O PDF Duo usa a mesma classe DuoDimension.HtmlToPdf para conversão de URL passando o URL para OpenHTML(...) seguido por SavePDF(path). O IronPDF usa ChromePdfRenderer com o método dedicado RenderUrlAsPdf(url), retornando um objeto PdfDocument.

Uma vantagem chave é que o motor de renderização baseado em Chromium do IronPDF proporciona suporte moderno CSS3 e JavaScript, enquanto os materiais do fornecedor do PDF Duo não divulgam qual motor HTML/CSS é usado. Saiba mais sobre a conversão de URL para PDF .

Exemplo 3: Fusão de PDFs

Antes (PDF Duo):

PDF Duo .NET não fornece uma API de fusão de PDF nativa. A superfície documentada é apenas de HTML para PDF, então as equipes que precisavam mesclar normalmente renderizavam cada PDF com o PDF Duo e então os concatenavam com uma biblioteca separada (comumente iTextSharp 4.x em projetos da era 2010):

//PDF Duo .NETis not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;

class Program
{
    static void Main()
    {
        // Render each source HTML to its own PDF
        var conv = new HtmlToPdf();
        conv.OpenHTML("page1.html");
        conv.SavePDF("document1.pdf");

        conv = new HtmlToPdf();
        conv.OpenHTML("page2.html");
        conv.SavePDF("document2.pdf");

        // Merging into a single PDF requires another library (e.g., iTextSharp).
        Console.WriteLine("PDF Duo has no native merge — combine output with another library.");
    }
}
C#

Após (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully!");
    }
}

Este exemplo demonstra uma diferença arquitetônica fundamental.PDF Duo .NETnão tem API de fusão alguma — fundir nos fluxos de trabalho do PDF Duo historicamente significava combiná-la com uma segunda biblioteca como iTextSharp 4.x.

O IronPDF consolida isso em uma única dependência: carregue cada PDF como um PdfDocument usando PdfDocument.FromFile(), e depois use o método estático PdfDocument.Merge() para combiná-los. Isso retorna um novo objeto PdfDocument que você salva separadamente com SaveAs().

A abordagem do IronPDF também permite que você manipule qualquer um dos PDFs antes de mesclar, adicione marcas d'água ao resultado mesclado, aplique configurações de segurança e mais. Para mesclar vários arquivos, você pode usar LINQ:

var paths = new[] { "document1.pdf", "document2.pdf", "document3.pdf" };
var pdfs = paths.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");

Saiba mais sobre como mesclar e dividir PDFs .


Novas funcionalidades após a migração

Após migrar para o IronPDF, você obtém recursos que o PDF Duo simplesmente não consegue oferecer:

Cabeçalhos e rodapés com números de página

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Company Report</div>",
    MaxHeight = 25
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");

O PDF Duo não suporta cabeçalhos ou rodapés — não existe funcionalidade equivalente. O IronPDF oferece suporte completo a HTML/CSS com espaços reservados integrados para conteúdo dinâmico, como números de página. Consulte o guia de cabeçalhos e rodapés .

Marcas d'água

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

pdf.ApplyWatermark(
    "<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>",
    45,
    VerticalAlignment.Middle,
    HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

O PDF Duo não suporta marcas d'água. O IronPDF oferece marcas d'água baseadas em HTML com suporte completo para estilos CSS.

Proteção por senha

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");

O PDF Duo não oferece suporte à proteção por senha ou configurações de segurança.

Extração de texto

var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();

O PDF Duo não suporta extração de texto.


Notas críticas sobre migração

Sem Opções de Layout de Página no HtmlToPdf do PDF Duo

DuoDimension.HtmlToPdf não documenta um objeto de configurações cobrindo tamanho de papel, orientação ou margens. O IronPDF os expõe explicitamente em RenderingOptions:

// PDF Duo: no documented per-instance settings — OpenHTML / SavePDF only.

// IronPDF:
renderer.RenderingOptions.PaperSize    = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop    = 20;
renderer.RenderingOptions.MarginRight  = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft   = 15;

Salvar nomenclatura de método

Nomes de método diferentes para escrever o arquivo:

// PDF Duo:
conv.SavePDF("output.pdf");

// IronPDF:
pdf.SaveAs("output.pdf");

Carregando PDFs Existentes

PDF Duo .NET só escreve PDFs — não há chamada documentada "carregar PDF existente". Para operar em um PDF existente, você deve mudar para o IronPDF(ou outra biblioteca):

// PDF Duo: no equivalent.

// IronPDF:
var pdf = PdfDocument.FromFile("document.pdf");

Entrada de String HTML

O OpenHTML do PDF Duo não documenta uma chamada "renderizar esta string HTML"; as equipes escrevem a marcação para um arquivo temporário primeiro.IronPDF renderiza strings diretamente:

// PDF Duo:
File.WriteAllText("temp.html", html);
var conv = new DuoDimension.HtmlToPdf();
conv.OpenHTML("temp.html");
conv.SavePDF("output.pdf");

// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf(html).SaveAs("output.pdf");

Comparação de recursos

RecursoPDF Duo .NETIronPDF
HTML para PDFSim (motor não divulgado)CSS3 completo, JavaScript
URL para PDFSimCompleto com suporte de autenticação
Fusão de PDFsNão na API documentadaSim
Cabeçalhos/RodapésNão na API documentadaSuporte completo a HTML
Números de páginaNão na API documentadaEspaços reservados integrados
Marcas d'águaNão na API documentadaBaseado em HTML
Proteção por senhaNão na API documentadaOpções de segurança completas
Preenchimento de formuláriosNão na API documentadaSim
Assinaturas digitaisNão na API documentadaSim
Extração de textoNão na API documentadaSim
PDF para imagensNão na API documentadaSim
Suporte assíncronoNão na API documentadaassíncrono/await completo
.NET Core/5+Não na lista de tempo de execução documentadaApoiado

Lista de verificação para migração

Pré-migração

  • Encontre todas as referências do PDF Duo na base de código.
  • Documentar as configurações atuais (tamanho da página, margens, etc.)
  • Liste todas as operações de PDF utilizadas.
  • Identificar oportunidades para novas funcionalidades (cabeçalhos, marcas d'água, segurança)
  • Obtenha a chave de licença do IronPDF

Alterações no pacote

  • Remova a referência do projeto para PDFDuo.dll (PDF Duo .NET não está no NuGet) e exclua o binário fornecido
  • Instale o pacote NuGet IronPdf: dotnet add package IronPdf
  • Atualize as importações de namespace de using DuoDimension; para using IronPdf;

Alterações no código

  • Adicionar configuração de chave de licença na inicialização
  • Substitua DuoDimension.HtmlToPdf por ChromePdfRenderer
  • Substitua OpenHTML(path) + SavePDF(path) por RenderHtmlFileAsPdf(path).SaveAs(path)
  • Substitua o desvio de arquivo temporário para strings HTML por RenderHtmlAsPdf(html).SaveAs(path)
  • Substitua OpenHTML(url) + SavePDF(path) por RenderUrlAsPdf(url).SaveAs(path)
  • Substitua qualquer etapa externa de mesclagem por PdfDocument.Merge()
  • Defina o tamanho da página e margens explicitamente via RenderingOptions (sem equivalente no PDF Duo)
  • Substitua SavePDF() por SaveAs()
  • Para qualquer fluxo de trabalho "carregar PDF existente", use PdfDocument.FromFile() (sem equivalente no PDF Duo)

Pós-migração

  • Execute testes de regressão comparando a saída em PDF.
  • Verifique se os tamanhos das páginas e as margens correspondem.
  • Teste com HTML/CSS complexo (o mecanismo moderno do IronPDF deve lidar melhor com isso)
  • Adicionar novas funcionalidades (cabeçalhos, rodapés, marcas d'água, segurança)
  • Atualizar documentação

Observe: PDF Duo .NET é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pela DuoDimension. 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.