Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

Como migrar do PDF Duo para o IronPDF em C#

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

Aspecto PDF Duo .NET IronPDF
Última versão v2.4 (dezembro de 2010) Ativo, lançamentos regulares
Distribuição Download 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ção Uma página de produto do fornecedor Documentação abrangente + referência de API
Apoiar Nenhum visível Equipe de suporte profissional
Comunidade Negligenciável Mais de 41 milhões de downloads do NuGet (pilha Iron Software)
Renderização Motor não divulgado Cromo moderno
Características Apenas HTML para PDF HTML para PDF, fusão, segurança, assinaturas, OCR, formulários, marcas d'água
Licenciamento Por página de preços do fornecedor Comercial, 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
# 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";
// 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"
$vbLabelText   $csharpLabel

Identificar o uso do PDF Duo

# Find all PDF Duo references
grep -r "DuoDimension\|HtmlToPdf\b\|OpenHTML\|SavePDF" --include="*.cs" .
# 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 .NET IronPDF
using DuoDimension; using IronPdf;
(sem sub-namespaces documentados) using IronPdf.Rendering;

Mapeamentos de conversão de HTML para PDF

PDF Duo .NET IronPDF
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 .NET IronPDF
(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 .NET IronPDF
(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.

Necessidade PDF Duo .NET IronPDF
Carregar PDF existente não nativo — combina com iTextSharp 4.x ou similar PdfDocument.FromFile(path)
Salvar PDF conv.SavePDF(path) pdf.SaveAs(path)
Obter bytes de PDF not native pdf.BinaryData
Mesclar PDFs não nativo — combina com iTextSharp 4.x ou similar PdfDocument.Merge(pdf1, pdf2)

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

Recurso IronPDF
Cabeçalhos/Rodapés RenderingOptions.HtmlHeader, HtmlFooter
Números de página {page}, placeholders {total-pages}
Marcas d'água pdf.ApplyWatermark(html)
Proteção por senha pdf.SecuritySettings
Preenchimento de formulário pdf.Form.Fields
Assinaturas digitais pdf.SignWithFile()
Extração de texto pdf.ExtractAllText()
PDF para imagem pdf.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!");
    }
}
//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!");
    }
}
Imports DuoDimension
Imports System
Imports System.IO

Module Program
    Sub 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.
        Dim tempHtml As String = Path.GetTempFileName() & ".html"
        File.WriteAllText(tempHtml, "<h1>Hello World</h1><p>This is a PDF document.</p>")

        Dim conv As New HtmlToPdf()
        conv.OpenHTML(tempHtml)
        conv.SavePDF("output.pdf")
        Console.WriteLine("PDF created successfully!")
    End Sub
End Module
$vbLabelText   $csharpLabel

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!");
    }
}
// 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!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>"
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("output.pdf")
        Console.WriteLine("PDF created successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

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!");
    }
}
//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!");
    }
}
Imports DuoDimension
Imports System

Module Program
    Sub Main()
        Dim conv As New HtmlToPdf()
        conv.OpenHTML("https://www.example.com")
        conv.SavePDF("webpage.pdf")
        Console.WriteLine("Webpage converted to PDF!")
    End Sub
End Module
$vbLabelText   $csharpLabel

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!");
    }
}
// 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!");
    }
}
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")
        Console.WriteLine("Webpage converted to PDF!")
    End Sub
End Class
$vbLabelText   $csharpLabel

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.");
    }
}
//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.");
    }
}
Imports DuoDimension
Imports System

Module Program
    Sub Main()
        ' Render each source HTML to its own PDF
        Dim conv As 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.")
    End Sub
End Module
$vbLabelText   $csharpLabel

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!");
    }
}
// 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!");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf1 = PdfDocument.FromFile("document1.pdf")
        Dim pdf2 = PdfDocument.FromFile("document2.pdf")
        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
        Console.WriteLine("PDFs merged successfully!")
    End Sub
End Class
$vbLabelText   $csharpLabel

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");
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");
Dim paths = {"document1.pdf", "document2.pdf", "document3.pdf"}
Dim pdfs = paths.Select(AddressOf PdfDocument.FromFile).ToList()
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

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");
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");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

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

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

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

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");
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");
Imports IronPdf
Imports IronPdf.Editing

Dim 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")
$vbLabelText   $csharpLabel

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");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
pdf.SaveAs("secured.pdf")
$vbLabelText   $csharpLabel

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();
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText()
$vbLabelText   $csharpLabel

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;
// 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;
' 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
$vbLabelText   $csharpLabel

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");
// PDF Duo:
conv.SavePDF("output.pdf");

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

' IronPDF:
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

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");
// PDF Duo: no equivalent.

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

Dim pdf = PdfDocument.FromFile("document.pdf")
$vbLabelText   $csharpLabel

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");
// 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");
' PDF Duo:
File.WriteAllText("temp.html", html)
Dim conv = New DuoDimension.HtmlToPdf()
conv.OpenHTML("temp.html")
conv.SavePDF("output.pdf")

' IronPDF:
Dim renderer = New ChromePdfRenderer()
renderer.RenderHtmlAsPdf(html).SaveAs("output.pdf")
$vbLabelText   $csharpLabel

Comparação de recursos

Recurso PDF Duo .NET IronPDF
HTML para PDF Sim (motor não divulgado) CSS3 completo, JavaScript
URL para PDF Sim Completo com suporte de autenticação
Fusão de PDFs Não na API documentada Sim
Cabeçalhos/Rodapés Não na API documentada Suporte completo a HTML
Números de página Não na API documentada Espaços reservados integrados
Marcas d'água Não na API documentada Baseado em HTML
Proteção por senha Não na API documentada Opções de segurança completas
Preenchimento de formulários Não na API documentada Sim
Assinaturas digitais Não na API documentada Sim
Extração de texto Não na API documentada Sim
PDF para imagens Não na API documentada Sim
Suporte assíncrono Não na API documentada assíncrono/await completo
.NET Core/5+ Não na lista de tempo de execução documentada Apoiado

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

ObservePDF 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 ...

Leia mais

Equipe de Suporte Iron

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim