迁移指南 如何用 C# 从 pdforge 迁移到 IronPDF Curtis Chau 已发布:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 为什么要从pdforge迁移到 IronPDF? 了解 pdforge pdforge 是基于云的 PDF 生成 API,通过调用 API 与您的应用程序集成,提供生成 PDF 文件的简单方法。 通过将 PDF 创建任务卸载到外部 API,开发人员可以简化开发流程。 不过,pdforge 也存在一些缺点,如外部依赖性、有限的定制选项和持续的订阅成本,开发人员应对此有所了解。 云 API 依赖性问题 pdforge 在外部云服务器上处理所有文件。 这种架构给生产应用程序带来了重大问题: 1.外部服务器处理:您生成的每个 PDF 都需要将您的 HTML/数据发送到pdforge的服务器——您的文档将离开您的基础架构。 2.隐私和合规风险:敏感数据通过互联网传输到第三方服务器。 使用pdforge时,开发人员需要考虑到与向外部 API 发送数据有关的安全问题。 如果 PDF 内容包含敏感信息,这可能是一个关键的考虑因素。 3.持续订阅成本:每月费用无限期累积,且不涉及资产所有权。pdforge 的 SaaS 模式引入了持续的运营支出,这些支出会随着时间的推移而累积。 4.网络依赖性:网络不可用时无法生成 PDF 文件。 5.速率限制: API 使用上限可能会限制高流量应用程序。 6.网络延迟:往返时间会使每次 PDF 生成增加几秒钟。 pdforge与IronPDF对比 特征 pdforge IronPDF 部署类型 基于云的 API 本地图书馆 依赖关系 需要互联网和 API 认证 无外部依赖性 定制 对 PDF 生成的控制有限 完全控制定制 成本结构 持续订阅 一次性购买选项 安全性 通过网络发送数据的潜在问题 完全在本地环境中进行数据处理 设置复杂性 外部处理使初始设置更简单 需要更多的初始设置和配置 IronPDF 的与众不同之处在于它提供了一个完全本地化的库,使开发人员能够完全控制 PDF 创建过程。 这对于希望在内部处理文件或外部 API 调用引入安全问题的应用程序尤其有利。IronPDF在本地处理所有内容,将此类风险降至最低。 对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队,IronPDF 提供了一个本地处理基础,消除了对云的依赖,同时增加了全面的 PDF 操作功能。 开始之前 前提条件 .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 访问权限:能够安装 NuGet 包 IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。 NuGet 软件包变更 # Removepdforgepackages dotnet remove package pdforge dotnet remove package PdfForge # Install IronPDF dotnet add package IronPdf # Removepdforgepackages dotnet remove package pdforge dotnet remove package PdfForge # 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 确定pdforge的用法 # Findpdforgeusage grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" . # Find placeholder patterns to migrate grep -r "{totalPages}" --include="*.cs" . # Findpdforgeusage grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" . # Find placeholder patterns to migrate grep -r "{totalPages}" --include="*.cs" . SHELL 完整的 API 参考 命名空间变更 // Before: pdforge using PdfForge; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; // Before: pdforge using PdfForge; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; $vbLabelText $csharpLabel 核心类映射 pdforge IronPDF 备注 HtmlToPdfConverter ChromePdfRenderer 主要 PDF 生成器 PDFClient ChromePdfRenderer 相当于 API 客户端 页面大小.A4 PdfPaperSize.A4 纸张尺寸枚举 PageOrientation.Landscape PdfPaperOrientation.Landscape 方向枚举 返回类型:字节[] PDF 文档 结果目标 方法映射 pdforge IronPDF 备注 converter.ConvertHtmlString(html) renderer.RenderHtmlAsPdf(html) HTML 字符串到 PDF converter.ConvertUrl(url) renderer.RenderUrlAsPdf(url) URL 至 PDF File.WriteAllBytes(path,字节) pdf.SaveAs(路径) 保存到磁盘 返回类型:字节[] pdf.BinaryData 获取原始字节 配置映射 pdforge IronPdf (渲染选项) 备注 converter.PageSize = PageSize.A4 renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 纸张大小 converter.Orientation = PageOrientation.Landscape renderer.RenderingOptions.PaperOrientation=PdfPaperOrientation.Landscape渲染器。 定位 Footer = "Page {page} of {totalPages}"代码 TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}" }TextFooter = 新的 TextHeaderFooter { CenterText = "Page {page} of {total-pages}"} 页脚(注意占位符变化) pdforge中没有的新功能 IronPdf 特点 说明 PdfDocument.Merge() 合并多个 PDF pdf.ExtractAllText() 从 PDF 中提取文本 pdf.ApplyWatermark() 添加水印 pdf.SecuritySettings 密码保护 pdf.Form 表格填写 pdf.SignWithDigitalSignature() 数字签名 代码迁移示例 示例 1:HTML 字符串到 PDF 的转换 之前(pdforge): // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); } } // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel 这里的根本区别在于处理模型和返回类型。pdforge使用HtmlToPdfConverter和 ConvertHtmlString() 返回一个 byte[] 数组,然后您必须使用 File.WriteAllBytes() 保存结果。 IronPDF 使用ChromePdfRenderer和 RenderHtmlAsPdf() 返回PDF 文档对象。 该对象可以直接使用 SaveAs() 保存,如果您需要原始字节,也可以访问pdf.BinaryData。PDF 文档还允许在保存前进行操作(添加水印、与其他 PDF 合并、添加安全性)。 请参阅 HTML 转 PDF 文档,了解全面的示例。 示例 2:URL 到 PDF 的转换 之前(pdforge): // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var pdf = converter.ConvertUrl("https://example.com"); File.WriteAllBytes("webpage.pdf", pdf); } } // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var pdf = converter.ConvertUrl("https://example.com"); File.WriteAllBytes("webpage.pdf", pdf); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://example.com"); pdf.SaveAs("webpage.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel pdforge 在HtmlToPdfConverter类上使用 ConvertUrl() 返回您使用 File.WriteAllBytes() 写入的字节。IronPDF在ChromePdfRenderer上使用RenderUrlAsPdf(),通过内置的SaveAs()方法返回一个PdfDocument。 IronPdf 的主要优势在于使用 Chromium 引擎在本地获取和渲染 URL,而不会将数据发送到外部服务器。IronPDF作为一个本地库,可能会提供更好的性能,因为网络请求不涉及往返时间。 了解有关 URL 至 PDF 转换的更多信息。 示例 3:使用自定义设置将 HTML 文件转换为 PDF 文件 之前(pdforge): // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; var htmlContent = File.ReadAllText("input.html"); var pdf = converter.ConvertHtmlString(htmlContent); File.WriteAllBytes("output.pdf", pdf); } } // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; var htmlContent = File.ReadAllText("input.html"); var pdf = converter.ConvertHtmlString(htmlContent); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; var htmlContent = System.IO.File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; var htmlContent = System.IO.File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel 本例显示了配置模式的差异。pdforge直接在转换器对象上设置属性(converter.PageSize = PageSize.A4,converter.Orientation = PageOrientation.Landscape)。 IronPdf 使用带有强类型枚举的 RenderingOptions 属性:renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 和 renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape。 这将提供 IntelliSense 支持和编译时类型安全。 请注意,IronPDF 需要导入 IronPdf.Rendering 命名空间以获得纸张尺寸和方向枚举。 更多配置示例请参见 tutorials 。 关键迁移说明 返回类型更改 pdforge 返回 byte[] ;IronPDF返回 PdfDocument: // pdforge: Returns byte[] byte[] pdfBytes = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Returns PdfDocument var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Direct save byte[] bytes = pdf.BinaryData; // Get bytes if needed // pdforge: Returns byte[] byte[] pdfBytes = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Returns PdfDocument var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Direct save byte[] bytes = pdf.BinaryData; // Get bytes if needed $vbLabelText $csharpLabel 转换器类更改 // pdforge: HtmlToPdfConverter var converter = new HtmlToPdfConverter(); // IronPDF: ChromePdfRenderer var renderer = new ChromePdfRenderer(); // pdforge: HtmlToPdfConverter var converter = new HtmlToPdfConverter(); // IronPDF: ChromePdfRenderer var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 方法名称更改 //pdforgemethods converter.ConvertHtmlString(html) converter.ConvertUrl(url) //IronPDFmethods renderer.RenderHtmlAsPdf(html) renderer.RenderUrlAsPdf(url) //pdforgemethods converter.ConvertHtmlString(html) converter.ConvertUrl(url) //IronPDFmethods renderer.RenderHtmlAsPdf(html) renderer.RenderUrlAsPdf(url) $vbLabelText $csharpLabel 保存方法更改 // pdforge: Manual file write File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Built-in save method pdf.SaveAs("output.pdf"); // pdforge: Manual file write File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Built-in save method pdf.SaveAs("output.pdf"); $vbLabelText $csharpLabel 配置位置更改 pdforge 使用转换器上的属性; IronPdf 使用 RenderingOptions: // pdforge: Properties on converter converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; // IronPDF: Properties on RenderingOptions renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; // pdforge: Properties on converter converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; // IronPDF: Properties on RenderingOptions renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; $vbLabelText $csharpLabel 页眉/页脚占位符语法 如果在页眉或页脚中使用页码,占位符的语法会有所不同: //pdforgeplaceholders "Page {page} of {totalPages}" //IronPDFplaceholders "Page {page} of {total-pages}" // Note: hyphen in total-pages //pdforgeplaceholders "Page {page} of {totalPages}" //IronPDFplaceholders "Page {page} of {total-pages}" // Note: hyphen in total-pages $vbLabelText $csharpLabel 迁移后的新功能 迁移到IronPDF后,您将获得pdforge无法提供的功能: PDF 合并 var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel 文本提取 var pdf = PdfDocument.FromFile("document.pdf"); string allText = pdf.ExtractAllText(); var pdf = PdfDocument.FromFile("document.pdf"); string allText = pdf.ExtractAllText(); $vbLabelText $csharpLabel 水印 pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); $vbLabelText $csharpLabel 密码保护 pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; $vbLabelText $csharpLabel 功能对比摘要 特征 pdforge IronPDF HTML 至 PDF ✓ ✓ URL 至 PDF ✓ ✓ 页面设置 ✓ ✓ 离线能力 ✗ ✓ 本地处理 ✗ ✓ 合并 PDF ✗ ✓ 拆分 PDF ✗ ✓ 提取文本 ✗ ✓ 水印 ✗ ✓ 表格填写 ✗ ✓ 数字签名 ✗ ✓ 密码保护 ✗ ✓ 无费率限制 ✗ ✓ 一次性许可 ✗ ✓ 迁移清单 迁移前 清点代码库中所有pdforgeAPI 调用 记录当前使用的配置选项(页面大小、方向) 确定要更新的页眉/页脚占位符( {totalPages} → {total-pages} ) 规划IronPDF许可证密钥存储(建议使用环境变量) 先使用IronPDF试用许可证进行测试 软件包变更 删除pdforge NuGet 包 移除PdfForge NuGet 包 安装IronPdf NuGet 包: dotnet add package IronPdf 代码更改 更新所有命名空间导入( using PdfForge; → using IronPdf; ) 添加using IronPdf.Rendering;用于纸张尺寸和方向枚举 将HtmlToPdfConverter替换为ChromePdfRenderer 将ConvertHtmlString()替换为RenderHtmlAsPdf() 将ConvertUrl()替换为RenderUrlAsPdf() 将File.WriteAllBytes()替换为pdf.SaveAs() 将PageSize属性移至RenderingOptions.PaperSize 将Orientation属性移至RenderingOptions.PaperOrientation 更新枚举名称(页面大小.A4→PdfPaperSize.A4) 更新枚举名称(PageOrientation.Landscape→PdfPaperOrientation.Landscape) 更新页眉/页脚中的占位符语法 后迁移 测试 PDF 输出质量是否符合预期 验证离线操作是否正常 从配置中移除 API 凭据 根据需要添加新功能(合并、水印、安全) 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# 从 PdfPig 迁移到 IronPDF如何用 C# 从 PdfiumViewer 迁...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多