迁移指南 如何用 C# 从 DynamicPDF 迁移到 IronPDF Curtis Chau 已发布:2026年1月11日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 为什么要从动态 PDF迁移到 IronPDF? DynamicPDF 的产品碎片化是迁移的主要驱动力。 了解许可模式对于评估当前实施的真实成本至关重要。 产品碎片化问题 DynamicPDF 是作为具有单独许可证的独立产品出售的: 1.动态 PDF 生成器:从零开始创建 PDF DynamicPDF Merger:合并、拆分和操作现有 PDF 文件(需另行购买) DynamicPDF核心套件:组合生成器和合并器 DynamicPDF ReportWriter:报表生成 DynamicPDF HTML Converter: HTML 转 PDF 转换(独立插件) DynamicPDF 打印管理器:以编程方式打印 PDF 完整的 PDF 解决方案需要 3-5 个动态 PDF单独许可证。 IronPdf 一揽子包含所有内容。 架构比较 方面 动态 PDF IronPDF 产品模型 零散(5 个以上产品) 一体化库 许可 需要多个许可证 单一许可证 HTML 到 PDF 单独购买附加组件 基于 Chromium 的内置 CSS支持 有限(需要附加功能) 带有 Flexbox/Grid 的完整 CSS3 API 风格 基于坐标的定位 HTML/CSS + 操作 API 学习曲线 Steep(多个应用程序接口) 温和(网络技术) 现代.NET .NET Standard 2.0 .NET 6/7/8/9+ 原生语言 主要迁移优势 1.单个包:一个 NuGet 包即可替代 3-5 个动态 PDF包 2.现代渲染: Chromium 引擎与传统渲染 Web 技术:使用 HTML/CSS 而非基于坐标的定位 4.更简洁的 API:代码更少,更易读,更易于维护 5.无需额外购买: HTML、合并、安全功能全部包含在内 迁移前准备 前提条件 确保您的环境符合这些要求: .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9 Visual Studio 2019+ 或带有 C# 扩展的 VS Code 访问 NuGet 包管理器 -IronPDF许可证密钥(可在ironpdf.com免费试用) 审计动态 PDF的使用情况 在解决方案目录中运行这些命令,以识别所有动态 PDF引用: # Find all动态 PDFreferences grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" . # Check NuGet packages dotnet list package | grep -i dynamic # Find all动态 PDFreferences grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" . # Check NuGet packages dotnet list package | grep -i dynamic SHELL 需要查找的常见软件包: ceTe.DynamicPDF.CoreSuite.NET ceTe.DynamicPDF.Generator.NET ceTe.DynamicPDF.Merger.NET ceTe.DynamicPDF.HtmlConverter.NET 理解范式转变 从动态 PDF迁移到IronPDF时,最重要的变化是文档创建的基本方法。动态 PDF使用基于坐标的定位,您可以将元素放置在页面上特定的 X、Y 坐标上。 IronPdf 使用 HTML/CSS 渲染,您可以使用网络技术进行设计。 这种模式的转变意味着将标签</code>,文本区域和表 2`元素转换为 HTML 对应元素--这种变化通常会带来更可读、更易维护的代码。 逐步迁移过程 步骤 1:更新 NuGet 软件包 删除所有动态 PDF软件包并安装 IronPdf: # Remove动态 PDFpackages dotnet remove package ceTe.DynamicPDF.CoreSuite.NET dotnet remove package ceTe.DynamicPDF.Generator.NET dotnet remove package ceTe.DynamicPDF.Merger.NET dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET # Install IronPDF dotnet add package IronPdf # Remove动态 PDFpackages dotnet remove package ceTe.DynamicPDF.CoreSuite.NET dotnet remove package ceTe.DynamicPDF.Generator.NET dotnet remove package ceTe.DynamicPDF.Merger.NET dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET # Install IronPDF dotnet add package IronPdf SHELL 步骤 2:更新命名空间引用 用IronPDF替换动态 PDF命名空间: // Remove these using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; using ceTe.DynamicPDF.Merger; using ceTe.DynamicPDF.Conversion; // Add this using IronPdf; // Remove these using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; using ceTe.DynamicPDF.Merger; using ceTe.DynamicPDF.Conversion; // Add this using IronPdf; $vbLabelText $csharpLabel 步骤 3:配置许可证 // 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 完整的 API 迁移参考 核心类映射 DynamicPDF 类 IronPdf 同等产品 备注 文档 ChromePdfRenderer 用于生成新的 PDF 文档 PDF 文档 用于操作现有 PDF 页面 HTML <div> 带分页符 或多次渲染 合并文档 PdfDocument.Merge() 静态合并法 HtmlConverter ChromePdfRenderer 内置,无附加 页面元素到 HTML 的映射 DynamicPDF 页面元素 IronPdf/HTML 同等版本 标签 <p></code>, <code><span></code>, <code><div> 文本区域 使用 CSS 的 <div>, <p> 图片 <img> 标记 表 2 HTML <table> 页面编号标签 {page} / {total-pages} 占位符 关键 API 映射 动态 PDF IronPDF 备注 文档</code> + <code>页面 ChromePdfRenderer 基于 HTML 的生成 标签</code>, <code>文本区域 HTML <p>, <div> 使用 CSS 创建风格 表 2 HTML <table> 完整的 CSS 样式 合并文档 PdfDocument.Merge() 静态方法 HtmlConverter ChromePdfRenderer 内置,无附加 document.Draw() pdf.SaveAs()</code> / <code>pdf.BinaryData 页面编号标签</code> <code>%%CP%% {page} 占位符 不同的语法 代码迁移示例 HTML 到 PDF 转换 HTML 到 PDF 的转换演示了动态 PDF对单独的HtmlConverter`附加组件与 IronPdf 内置 Chromium 渲染的对比要求。 DynamicPDF 实现: // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET using ceTe.DynamicPDF; using ceTe.DynamicPDF.Conversion; class Program { static void Main() { string html = "<html><body><h1>Hello World</h1></body></html>"; HtmlConverter converter = new HtmlConverter(html); converter.Convert("output.pdf"); } } // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET using ceTe.DynamicPDF; using ceTe.DynamicPDF.Conversion; class Program { static void Main() { string html = "<html><body><h1>Hello World</h1></body></html>"; HtmlConverter converter = new HtmlConverter(html); converter.Convert("output.pdf"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { string html = "<html><body><h1>Hello World</h1></body></html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { string html = "<html><body><h1>Hello World</h1></body></html>"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel IronPdf 的ChromePdfRenderer提供基于 Chromium 的渲染,完全支持 CSS3 - 无需单独购买附加组件。 有关更多选项,请参阅 HTML 转 PDF 文档。 合并多个 PDF 文件 PDF 合并演示了动态 PDF的合并文档类(需要 Merger 产品许可证)与IronPDF内置静态 Merge 方法之间的区别。 DynamicPDF 实现: // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET using ceTe.DynamicPDF; using ceTe.DynamicPDF.Merger; class Program { static void Main() { MergeDocument document = new MergeDocument("document1.pdf"); document.Append("document2.pdf"); document.Draw("merged.pdf"); } } // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET using ceTe.DynamicPDF; using ceTe.DynamicPDF.Merger; class Program { static void Main() { MergeDocument document = new MergeDocument("document1.pdf"); document.Append("document2.pdf"); document.Draw("merged.pdf"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; 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"); } } // NuGet: Install-Package IronPdf using IronPdf; 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"); } } $vbLabelText $csharpLabel IronPDF 的静态 Merge 方法可直接接受多个PDF 文档对象。 更多选项请参阅PDF 合并文档。 在 PDF 中添加文本 文本放置演示了从动态 PDF基于坐标的标签元素到IronPDF基于 HTML 的 TextStamper 的范式转变。 DynamicPDF 实现: // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; class Program { static void Main() { Document document = new Document(); Page page = new Page(PageSize.Letter); Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100); page.Elements.Add(label); document.Pages.Add(page); document.Draw("output.pdf"); } } // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; class Program { static void Main() { Document document = new Document(); Page page = new Page(PageSize.Letter); Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100); page.Elements.Add(label); document.Pages.Add(page); document.Draw("output.pdf"); } } $vbLabelText $csharpLabel IronPDF 实现: // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Editing; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>"); var textStamper = new TextStamper() { Text = "Hello from IronPDF!", FontSize = 20, VerticalAlignment = VerticalAlignment.Top }; pdf.ApplyStamp(textStamper); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Editing; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>"); var textStamper = new TextStamper() { Text = "Hello from IronPDF!", FontSize = 20, VerticalAlignment = VerticalAlignment.Top }; pdf.ApplyStamp(textStamper); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel IronPdf 的 TextStamper 提供基于对齐方式的定位,而不是基于坐标的放置,从而使布局在不同页面尺寸中更具适应性。 有关更多选项,请参阅水印和盖章文档。 完整文档生成示例 本综合示例展示了将包含多个元素的动态 PDF文档转换为IronPDF的 HTML 方法。 DynamicPDF 实现: using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; using ceTe.DynamicPDF.Merger; // Generation (requires Generator license) Document document = new Document(); Page page = new Page(PageSize.A4); Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18); title.Align = TextAlign.Center; page.Elements.Add(title); Table2 table = new Table2(40, 60, 515, 500); // ... complex table setup with columns, rows, cells... page.Elements.Add(table); document.Pages.Add(page); document.Draw("invoice.pdf"); // Merging (requires Merger license) MergeDocument mergeDoc = new MergeDocument("cover.pdf"); mergeDoc.Append("invoice.pdf"); mergeDoc.Draw("final.pdf"); using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; using ceTe.DynamicPDF.Merger; // Generation (requires Generator license) Document document = new Document(); Page page = new Page(PageSize.A4); Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18); title.Align = TextAlign.Center; page.Elements.Add(title); Table2 table = new Table2(40, 60, 515, 500); // ... complex table setup with columns, rows, cells... page.Elements.Add(table); document.Pages.Add(page); document.Draw("invoice.pdf"); // Merging (requires Merger license) MergeDocument mergeDoc = new MergeDocument("cover.pdf"); mergeDoc.Append("invoice.pdf"); mergeDoc.Draw("final.pdf"); $vbLabelText $csharpLabel IronPDF 实现: using IronPdf; var renderer = new ChromePdfRenderer(); // All features in one library var html = @" <html> <head> <style> body { font-family: Helvetica, sans-serif; padding: 40px; } h1 { text-align: center; font-size: 18pt; } table { width: 100%; border-collapse: collapse; margin-top: 20px; } th, td { border: 1px solid #ccc; padding: 8px; } </style> </head> <body> <h1>Invoice Report</h1> <table> <tr><th>Product</th><th>Qty</th><th>Price</th></tr> <tr><td>Widget</td><td>10</td><td>$99.99</td></tr> </table> </body> </html>"; var invoice = renderer.RenderHtmlAsPdf(html); // Merging included - no separate license var cover = PdfDocument.FromFile("cover.pdf"); var final = PdfDocument.Merge(cover, invoice); final.SaveAs("final.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); // All features in one library var html = @" <html> <head> <style> body { font-family: Helvetica, sans-serif; padding: 40px; } h1 { text-align: center; font-size: 18pt; } table { width: 100%; border-collapse: collapse; margin-top: 20px; } th, td { border: 1px solid #ccc; padding: 8px; } </style> </head> <body> <h1>Invoice Report</h1> <table> <tr><th>Product</th><th>Qty</th><th>Price</th></tr> <tr><td>Widget</td><td>10</td><td>$99.99</td></tr> </table> </body> </html>"; var invoice = renderer.RenderHtmlAsPdf(html); // Merging included - no separate license var cover = PdfDocument.FromFile("cover.pdf"); var final = PdfDocument.Merge(cover, invoice); final.SaveAs("final.pdf"); $vbLabelText $csharpLabel 关键迁移说明 基于坐标的 HTML/CSS 定位 基本模式的转变需要将 X、Y 坐标定位转换为基于 CSS 的布局: //动态 PDF- coordinate-based var label = new Label("Hello World", 100, 200, 300, 50); //IronPDF- CSS positioning (if absolute positioning needed) var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>"; //IronPDF- preferred approach (flow-based) var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>"; //动态 PDF- coordinate-based var label = new Label("Hello World", 100, 200, 300, 50); //IronPDF- CSS positioning (if absolute positioning needed) var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>"; //IronPDF- preferred approach (flow-based) var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>"; $vbLabelText $csharpLabel 页面编号语法 DynamicPDF 和IronPDF对页码使用不同的占位符语法: //动态 PDFplaceholders "Page %%CP%% of %%TP%%" //IronPDFplaceholders "Page {page} of {total-pages}" //动态 PDFplaceholders "Page %%CP%% of %%TP%%" //IronPDFplaceholders "Page {page} of {total-pages}" $vbLabelText $csharpLabel 页眉和页脚 将动态 PDFTemplate 元素转换为IronPDFHtmlHeaderFooter 元素: //IronPDFheader/footer renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>", MaxHeight = 25 }; //IronPDFheader/footer renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>", MaxHeight = 25 }; $vbLabelText $csharpLabel 有关更多页眉/页脚选项,请参阅页眉和页脚文档。 安全设置 //IronPDFsecurity pdf.SecuritySettings.OwnerPassword = "ownerPassword"; pdf.SecuritySettings.UserPassword = "userPassword"; //IronPDFsecurity pdf.SecuritySettings.OwnerPassword = "ownerPassword"; pdf.SecuritySettings.UserPassword = "userPassword"; $vbLabelText $csharpLabel 有关全面的安全选项,请参阅加密文档。 迁移后核对表 完成代码迁移后,请验证以下内容: 生成PDF文件的可视化比较 检查文本位置和布局 测试表格渲染和溢出 检查所有页面的页眉/页脚 测试表单填写功能 验证安全性/加密 性能基准测试 删除未使用的动态 PDF许可证文件 更新文档 未来保护您的 PDF 基础架构 随着 .NET 10 即将推出,C# 14 也将引入新的语言特性,选择一个采用现代 .NET 模式的 PDF 库可以确保长期的兼容性。IronPDF对 .NET 6/7/8/9+ 的原生支持为项目延伸到 2025 年和 2026 年提供了一条清晰的前进道路--无需管理多个产品许可证或浏览零散的 API 的复杂性。 其他资源 IronPDF文档 HTML转PDF教程 API 参考 NuGet软件包 许可选项 从动态 PDF迁移到 IronPdf 可以消除管理多个产品许可证的复杂性,同时提供基于 Chromium 的现代渲染和完整的 CSS3 支持。 从基于坐标的定位过渡到 HTML/CSS 设计,通常会产生更易于维护的代码,并充分利用熟悉的网络技术。 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# 从 Easy PDF SDK 迁移到 IronPDF如何用 C# 从 DinkToPdf 迁移...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多