跳至页脚内容
迁移指南

如何用 C# 从 DynamicPDF 迁移到 IronPDF

从动态 PDF迁移到 IronPDF:完整的 C# 迁移指南。

DynamicPDF 是一个历史悠久的 .NET PDF 库,以其全面的 PDF 生成、合并和操作功能集而著称。 然而,DynamicPDF 分散的产品模式(生成器、合并器、HTML 转换器和其他组件需要单独的 License)给开发团队带来了复杂性和成本方面的挑战。 本综合指南提供了从动态 PDF逐步迁移到IronPDF的路径--IronPDF 是一个一体化的 .NET PDF 库,它将生成、操作和 HTML 转换集成在一个包中,并采用基于 Chromium 的现代渲染技术。

为什么要从动态 PDF迁移到 IronPDF? DynamicPDF 的产品碎片化是迁移的主要驱动力。 了解许可模式对于评估当前实施的真实成本至关重要。 ### 产品碎片化问题 DynamicPDF 是作为具有单独许可证的独立产品出售的: 1.**DynamicPDF生成器**:从零开始创建 PDF 2.**DynamicPDF合并器**:合并、分割和处理现有 PDF(单独购买) 3.**DynamicPDF核心套件**:组合生成器和合并器 4.**DynamicPDF ReportWriter**:报告生成 5.**DynamicPDF HTML Converter**:HTML 到 PDF 的转换(单独的附加组件) 6.**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 引擎与传统呈现 3.**网络技术**:使用 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](https://ironpdf.com/licensing/)免费试用) ### 审计动态 PDF的使用情况 在解决方案目录中运行这些命令,以识别所有动态 PDF引用: ```bash # Find all动态 PDFreferences grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" . # Check NuGet packages dotnet list package | grep -i dynamic ``` 需要查找的常见软件包: -<代码>ceTe.DynamicPDF.CoreSuite.NETceTe.DynamicPDF.Generator.NETceTe.DynamicPDF.Merger.NETceTe.DynamicPDF.HtmlConverter.NET标签,<代码>文本区域表 2文档ChromePdfRenderer文档PDF 文档页面` 带分页符|或多次渲染| |<代码>合并文档PdfDocument.Merge()HtmlConverterChromePdfRenderer标签

,<代码>,<代码>

文本区域`, `

`| |<代码>图片` 标记| |<代码>表 2`| |<代码>页面编号标签文档+<代码>页面ChromePdfRenderer标签,<代码>文本区域`, `

`|使用 CSS 创建风格| |<代码>表 2`|完整的 CSS 样式| |<代码>合并文档PdfDocument.Merge()HtmlConverterChromePdfRendererdocument.Draw()pdf.SaveAs()/<代码>pdf.BinaryData页面编号标签<代码>%%CP%%HtmlConverter

Hello World

"; HtmlConverter converter = new HtmlConverter(html); converter.Convert("output.pdf"); } } ``` **IronPDF 实现:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { string html = "

Hello World

"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } ``` IronPdf 的<代码>ChromePdfRenderer合并文档PDF 文档标签"); var textStamper = new TextStamper() { Text = "Hello from IronPDF!", FontSize = 20, VerticalAlignment = VerticalAlignment.Top }; pdf.ApplyStamp(textStamper); pdf.SaveAs("output.pdf"); } } ``` IronPdf 的 `TextStamper` 提供基于对齐方式的定位,而不是基于坐标的放置,从而使布局在不同页面尺寸中更具适应性。 有关更多选项,请参阅[水印和盖章文档](https://ironpdf.com/how-to/background-foreground/)。 ### 完整文档生成示例 本综合示例展示了将包含多个元素的动态 PDF文档转换为IronPDF的 HTML 方法。 **DynamicPDF 实现:** ```csharp 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"); ``` **IronPDF 实现:** ```csharp using IronPdf; var renderer = new ChromePdfRenderer(); // All features in one library var html = @"

Invoice Report

ProductQtyPrice
Widget10$99.99
"; 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"); ``` ## 关键迁移说明 ### 基于坐标的 HTML/CSS 定位 基本模式的转变需要将 X、Y 坐标定位转换为基于 CSS 的布局: ```csharp //动态 PDF- coordinate-based var label = new Label("Hello World", 100, 200, 300, 50); //IronPDF- CSS positioning (if absolute positioning needed) var html = "
Hello World
"; //IronPDF- preferred approach (flow-based) var html = "
Hello World
"; ``` ### 页面编号语法 DynamicPDF 和IronPDF对页码使用不同的占位符语法: ```csharp //动态 PDFplaceholders "Page %%CP%% of %%TP%%" //IronPDFplaceholders "Page {page} of {total-pages}" ``` ### 页眉和页脚 将动态 PDF`Template` 元素转换为IronPDF`HtmlHeaderFooter` 元素: ```csharp //IronPDFheader/footer renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "
Page {page} of {total-pages}
", MaxHeight = 25 }; ``` 有关更多页眉/页脚选项,请参阅[页眉和页脚文档](https://ironpdf.com/how-to/headers-and-footers/)。 ### 安全设置 ```csharp //IronPDFsecurity pdf.SecuritySettings.OwnerPassword = "ownerPassword"; pdf.SecuritySettings.UserPassword = "userPassword"; ``` 有关全面的安全选项,请参阅 [加密文档](https://ironpdf.com/how-to/pdf-encryption-and-decryption/)。 ## 迁移后核对表 完成代码迁移后,请验证以下内容: - [ ] 生成的 PDF 的可视化比较 - [ ] 核实文本定位和布局 - [ ] 测试表格渲染和溢出 - [ ] 核实所有页面的页眉/页脚 - [ ] 测试表格填写功能 - [ ] 验证安全性/加密性 - [ ] 性能基准 - [ ] 删除未使用的动态 PDF许可证文件 - [ ] 更新文档 ## 未来保护您的 PDF 基础架构 随着 .NET 10 即将推出,C# 14 也将引入新的语言特性,选择一个采用现代 .NET 模式的 PDF 库可以确保长期的兼容性。IronPDF对 .NET 6/7/8/9+ 的原生支持为项目延伸到 2025 年和 2026 年提供了一条清晰的前进道路--无需管理多个产品许可证或浏览零散的 API 的复杂性。 ## 其他资源 - [IronPDF文档](https://ironpdf.com/docs/) - [HTML转PDF教程](https://ironpdf.com/tutorials/) - [API Reference](https://ironpdf.com/object-reference/api/) - [NuGet软件包](https://www.nuget.org/packages/IronPdf/) - [许可选项](https://ironpdf.com/licensing/) --- 从动态 PDF迁移到 IronPdf 可以消除管理多个产品许可证的复杂性,同时提供基于 Chromium 的现代渲染和完整的 CSS3 支持。 从基于坐标的定位过渡到 HTML/CSS 设计,通常会产生更易于维护的代码,并充分利用熟悉的网络技术。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

相关文章