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:
-
Vendedor e Proveniência: Publicado por DuoDimension Software (duodimension.com), um pequeno ISV sem roteiro público e sem repositório GitHub.
-
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.
-
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.
-
Superfície Documentada Restrita: A API pública é essencialmente
DuoDimension.HtmlToPdfcomOpenHTML(...)eSavePDF(...). 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. -
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.
- 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
- Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
- 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
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"
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" .
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
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
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
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
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
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
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")
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")
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")
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")
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()
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
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")
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")
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")
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;parausing IronPdf;
Alterações no código
- Adicionar configuração de chave de licença na inicialização
- Substitua
DuoDimension.HtmlToPdfporChromePdfRenderer - Substitua
OpenHTML(path) + SavePDF(path)porRenderHtmlFileAsPdf(path).SaveAs(path) - Substitua o desvio de arquivo temporário para strings HTML por
RenderHtmlAsPdf(html).SaveAs(path) - Substitua
OpenHTML(url) + SavePDF(path)porRenderUrlAsPdf(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()porSaveAs() - 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

