迁移指南 如何用 C# 从 PDF Duo 迁移到 IronPDF Curtis Chau 已发布:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从PDF Duo .NET迁移到IronPDF将您的 .NET PDF 工作流程从一个模糊、文档不全、维护状态不明确的库迁移到一个稳定、文档齐全、维护积极的解决方案。 本指南提供了一个全面、循序渐进的迁移路径,可消除与废弃库相关的风险,同时获得 PDF Duo 无法提供的高级功能。 为什么要从 PDF Duo 迁移到 IronPDF. PDF 双风险问题 PDF Duo .NET 是 .NET 生态系统中一个难以捉摸、鲜为人知的库。 虽然它可能对追求简单的开发人员很有吸引力,但该库的模糊性给生产应用带来了巨大挑战: 1.出处不明:开发者身份不明,没有可验证的公司支持。 没有可见的 GitHub 仓库或源代码,NuGet 下载统计有限,许可条款不确定。 2.缺少文件:几乎不可能找到可靠的信息。 目前没有官方的 API 参考资料,社区示例稀少,也没有官方教程或指南。 由于缺乏可靠的文档,任何使用 PDF Duo 的尝试都会受到阻碍。 3.已弃用或不活跃状态:有明显的疏于管理迹象,更新频率不高或根本没有更新。 支持论坛显示 2019 年以来的帖子,但没有回复。 对于重大项目来说,被弃用的现实风险影响了其可行性。 4.功能有限:仅提供基本功能——简单的 HTML 转 PDF 和基本的 PDF 合并,没有表单、安全或水印等高级功能。 5.未知渲染引擎:对底层工作原理一无所知。 CSS/JavaScript 支持未知,渲染质量不可预测,现代网络功能支持也不确定。 6.支持风险:设备损坏时没有补救措施。 没有专业支持,没有社区帮助,完全有被放弃的风险。 PDF Duo 与IronPDF对比 方面 PDF Duo .NET IronPDF 维护 未知/无活动 积极、定期更新 文档 稀疏/遗漏 综合性 支持 无 专业的支持团队 社区 ~0 用户 41M+ NuGet 下载次数 渲染 未知引擎 现代 Chromium 译文特点 基本的 全功能 稳定性 未知 经过生产验证 许可 不明确 透明 对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了一个稳定的基础,拥有活跃的开发和全面的文档,消除了依赖废弃库的不确定性。 开始之前 前提条件 .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 访问权限:能够安装 NuGet 包 IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。 NuGet 软件包变更 # RemovePDF Duo .NET(if you can find the correct package name) dotnet remove package PDFDuo.NET dotnet remove package PDFDuo dotnet remove package PDF-Duo # Install IronPDF dotnet add package IronPdf # RemovePDF Duo .NET(if you can find the correct package name) dotnet remove package PDFDuo.NET dotnet remove package PDFDuo dotnet remove package PDF-Duo # Install IronPDF dotnet add package IronPdf SHELL 许可配置 // 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"; $vbLabelText $csharpLabel 确定 PDF Duo 的用途 # Find all PDF Duo references grep -r "PDFDuo\|HtmlToPdfConverter\|PdfMerger" --include="*.cs" . # Find all PDF Duo references grep -r "PDFDuo\|HtmlToPdfConverter\|PdfMerger" --include="*.cs" . SHELL 完整的 API 参考 命名空间变更 PDF Duo .NET IronPDF 使用 PDFDuo; 使用 IronPdf; 使用 PDFDuo.Document; 使用 IronPdf; 使用 PDFDuo.Rendering; 使用 IronPdf.Rendering; 使用 PDFDuo.Settings; 使用 IronPdf; HTML 到 PDF 转换映射 PDF Duo .NET IronPDF 备注 new HtmlToPdfConverter() new ChromePdfRenderer() 主呈现器 converter.ConvertHtmlString(html,路径) renderer.RenderHtmlAsPdf(html).SaveAs(path) HTML 字符串 converter.ConvertUrl(url, path) renderer.RenderUrlAsPdf(url).SaveAs(path) URL 转换 converter.ConvertFile(htmlPath, pdfPath) renderer.RenderHtmlFileAsPdf(htmlPath).SaveAs(pdfPath) HTML 文件 页面配置映射 PDF Duo .NET IronPDF 备注 settings.PageSize = PageSize.A4 RenderingOptions.PaperSize = PdfPaperSize.A4 纸张大小 settings.PageSize = PageSize.Letter RenderingOptions.PaperSize = PdfPaperSize.Letter 美国信函 settings.Orientation(设置)= Landscape(横向) RenderingOptions.PaperOrientation = Landscape 定位 new Margins(top, right, bottom, left)(页边距) 个别边距属性 参见以下内容 边距映射 PDF Duo .NET IronPDF 备注 new Margins(top, right, bottom, left)(页边距) 个别属性 无保证金对象 margins.Top RenderingOptions.MarginTop 顶边距(毫米) margins.Right RenderingOptions.MarginRight 右边距(毫米) margins.Bottom RenderingOptions.MarginBottom 底边距(毫米) margins.Left RenderingOptions.MarginLeft 左页边距(毫米) 文档操作映射 PDF Duo .NET IronPDF 备注 PDFDocument.Load(path) PdfDocument.FromFile(路径) 加载 PDF document.Save(路径) pdf.SaveAs(路径) 保存 PDF document.ToBytes() pdf.BinaryData 获取字节数组 new PdfMerger() PdfDocument.Merge() 静态方法 merger.AddFile(path) PdfDocument.FromFile(路径) 加载然后合并 merger.Merge(output) merged.SaveAs(输出) 合并后 PDF Duo 中不提供的新功能 特征 IronPDF 页眉/页脚 RenderingOptions.HtmlHeader</code>,HtmlFooter` 页码 {page}, {total-pages} 占位符 水印 pdf.ApplyWatermark(html) 密码保护 pdf.SecuritySettings 表格填写 pdf.Form.Fields 数字签名 pdf.SignWithFile() 文本提取 pdf.ExtractAllText() 将 PDF 转换为图像 pdf.RasterizeToImageFiles() 代码迁移示例 示例 1:HTML 到 PDF 的转换 之前(PDF Duo): // NuGet: Install-Package PDFDuo.NET using PDFDuo; using System; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>"; converter.ConvertHtmlString(htmlContent, "output.pdf"); Console.WriteLine("PDF created successfully!"); } } // NuGet: Install-Package PDFDuo.NET using PDFDuo; using System; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>"; converter.ConvertHtmlString(htmlContent, "output.pdf"); Console.WriteLine("PDF created successfully!"); } } $vbLabelText $csharpLabel After (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!"); } } $vbLabelText $csharpLabel 这里的根本区别在于 API 模式。 PDF Duo 的HtmlToPdfConverter.ConvertHtmlString()只需一次调用即可获取 HTML 和输出路径,同时处理转换和保存。IronPDF的 ChromePdfRenderer.RenderHtmlAsPdf() 首先返回一个 PdfDocument 对象,然后您可以使用 SaveAs() 保存该对象。 这种面向对象的方法具有显著的优势:您可以在保存之前对 PDF 进行操作(添加水印、合并文档、添加安全性、提取文本),而 PDF Duo 的直接到文件方法无法实现这些操作。 有关其他渲染选项,请参阅 HTML to PDF 文档。 示例 2:URL 到 PDF 的转换 之前(PDF Duo): // NuGet: Install-Package PDFDuo.NET using PDFDuo; using System; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.ConvertUrl("https://www.example.com", "webpage.pdf"); Console.WriteLine("Webpage converted to PDF!"); } } // NuGet: Install-Package PDFDuo.NET using PDFDuo; using System; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.ConvertUrl("https://www.example.com", "webpage.pdf"); Console.WriteLine("Webpage converted to PDF!"); } } $vbLabelText $csharpLabel After (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!"); } } $vbLabelText $csharpLabel PDF Duo 使用相同的 HtmlToPdfConverter 类与 ConvertUrl(url, outputPath) 进行 URL 转换。IronPDF使用 ChromePdfRenderer 和专用的 RenderUrlAsPdf(url) 方法,返回一个 PdfDocument 对象。 一个关键优势是IronPDF基于 Chromium 的渲染引擎提供了现代 CSS3 和 JavaScript 支持,而 PDF Duo 未知的渲染引擎使得 CSS/JavaScript 支持不确定,渲染质量不可预测。 了解有关 URL 至 PDF 转换的更多信息。 示例 3:PDF 合并 之前(PDF Duo): // NuGet: Install-Package PDFDuo.NET using PDFDuo; using System; class Program { static void Main() { var merger = new PdfMerger(); merger.AddFile("document1.pdf"); merger.AddFile("document2.pdf"); merger.Merge("merged.pdf"); Console.WriteLine("PDFs merged successfully!"); } } // NuGet: Install-Package PDFDuo.NET using PDFDuo; using System; class Program { static void Main() { var merger = new PdfMerger(); merger.AddFile("document1.pdf"); merger.AddFile("document2.pdf"); merger.Merge("merged.pdf"); Console.WriteLine("PDFs merged successfully!"); } } $vbLabelText $csharpLabel After (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!"); } } $vbLabelText $csharpLabel 这个例子显示了一个基本的架构差异。 PDF Duo 使用一个专用的 PdfMerger 类,该类使用 AddFile() 方法对文件进行排队,然后使用 Merge() 一步完成合并和保存。 IronPDF 使用不同的模式:使用 PdfDocument.FromFile() 将每个 PDF 作为 PdfDocument 加载,然后使用静态PdfDocument.Merge()方法将它们合并。 这会返回一个新的PdfDocument对象,您可以使用SaveAs()` 单独保存该对象。 IronPdf 方法提供了更大的灵活性--您可以在合并前对任何 PDF 进行操作,为合并后的结果添加水印,应用安全设置等。 要合并多个文件,可以使用 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"); $vbLabelText $csharpLabel 了解有关 合并和拆分 PDF 的更多信息。 迁移后的新功能 迁移到IronPDF后,您将获得 PDF Duo 无法提供的功能: 带页码的页眉和页脚 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"); $vbLabelText $csharpLabel PDF Duo 不支持页眉或页脚--没有相应的功能。IronPDF提供全面的 HTML/CSS 支持,并为页码等动态内容提供内置占位符。 请参见页眉和页脚指南。 水印 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"); $vbLabelText $csharpLabel PDF Duo 不支持水印。IronPDF提供基于 HTML 的水印,并完全支持 CSS 样式。 密码保护 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"); $vbLabelText $csharpLabel PDF Duo 不支持密码保护或安全设置。 文本提取 var pdf = PdfDocument.FromFile("document.pdf"); string text = pdf.ExtractAllText(); var pdf = PdfDocument.FromFile("document.pdf"); string text = pdf.ExtractAllText(); $vbLabelText $csharpLabel PDF Duo 不支持文本提取。 关键迁移说明 单个属性的边距对象 PDF Duo 使用单个 Margins 对象; IronPdf 使用个别属性: // PDF Duo: new Margins(top: 20, right: 15, bottom: 20, left: 15) // IronPDF: renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginRight = 15; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 15; // PDF Duo: new Margins(top: 20, right: 15, bottom: 20, left: 15) // IronPDF: renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginRight = 15; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 15; $vbLabelText $csharpLabel 保存方法命名 不同的保存方法名称: // PDF Duo: document.Save("output.pdf"); // IronPDF: pdf.SaveAs("output.pdf"); // PDF Duo: document.Save("output.pdf"); // IronPDF: pdf.SaveAs("output.pdf"); $vbLabelText $csharpLabel 加载 PDF 文件 不同的加载方法名称: // PDF Duo: PDFDocument.Load("document.pdf") // IronPDF: PdfDocument.FromFile("document.pdf") // PDF Duo: PDFDocument.Load("document.pdf") // IronPDF: PdfDocument.FromFile("document.pdf") $vbLabelText $csharpLabel 从设置对象到属性 PDF Duo 使用传递给构造函数的设置对象; IronPdf 使用属性: // PDF Duo: var settings = new PDFSettings { PageSize = PageSize.A4 }; var converter = new HtmlToPdfConverter(settings); // IronPDF: var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; // PDF Duo: var settings = new PDFSettings { PageSize = PageSize.A4 }; var converter = new HtmlToPdfConverter(settings); // IronPDF: var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; $vbLabelText $csharpLabel 功能对比 特征 PDF Duo .NET IronPDF HTML 至 PDF 基本的 完整的 CSS3、JavaScript URL 至 PDF 基本的 完全支持授权 PDF 合并 是 是 页眉/页脚 否 完全支持 HTML 页码 否 内置占位符 水印 否 基于 HTML 密码保护 否 全面的安全选项 表格填写 否 是 数字签名 否 是 文本提取 否 是 将 PDF 转换为图像 否 是 异步支持 未知 完整的异步/等待 .NET Core/5+ 未知 全面支持 迁移清单 迁移前 在代码库中查找所有 PDF Duo 引用 记录当前设置(页面大小、页边距等) 列出所有已使用的 PDF 操作 寻找新功能(标题、水印、安全)的机会 获取IronPDF许可证密钥 软件包变更 删除PDFDuo.NET NuGet 包 安装IronPdf NuGet 包: dotnet add package IronPdf 将命名空间导入从using PDFDuo;更新为using IronPdf; 代码更改 在启动时添加许可证密钥配置 将HtmlToPdfConverter替换为ChromePdfRenderer 将ConvertHtmlString(html, path)替换为RenderHtmlAsPdf(html).SaveAs(path) 将ConvertUrl(url, path)替换为RenderUrlAsPdf(url).SaveAs(path) 将PdfMerger模式替换为PdfDocument.Merge()模式 将Margins对象转换为单独的边距属性 将Save()替换为SaveAs() 将Load()替换为FromFile() 后迁移 运行回归测试,比较 PDF 输出 核实页面尺寸和边距是否一致 使用复杂的 HTML/CSS 进行测试(IronPDF 的现代引擎应该能更好地处理这种情况) 添加新功能(页眉、页脚、水印、安全功能) 更新文档 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何用 C# 从 PDFFilePrint 迁移到 IronPDF如何用 C# 从 PDFBolt 迁移到 ...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多