迁移指南 如何用 C# 从 PDFBolt 迁移到 IronPDF Curtis Chau 已发布:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从PDFBolt迁移到IronPDF可将您的 .NET PDF 工作流程从仅支持云的外部文档处理 SaaS 服务迁移到具有完全数据隐私和无限本地生成功能的自托管库。 本指南提供了一个全面、逐步的迁移路径,可消除网络依赖性、使用限制和外部数据传输,同时获得PDFBolt无法提供的 PDF 操作功能。 为什么要从PDFBolt迁移到 IronPDF. 仅限云的问题 PDFBolt 是一个纯云 SaaS 平台,可在外部服务器上处理您的文档。 这种架构虽然方便快速制作原型,但却给生产应用带来了巨大挑战: 1.仅云端处理:每个文档都通过外部服务器处理——没有自托管选项,这可能会阻碍那些需要更多控制其数据和流程的企业。 2.数据隐私风险:敏感文件(合同、医疗记录、财务数据)必须向外传输。 处理敏感信息的公司会有合理的顾虑。 3.使用限制:免费套餐每月最多只能处理 100 个文档,这对于规模较大的企业来说可能不够用。 按文档付费的价格对于生产工作量来说会很快增加。 4.网络依赖性:互联网中断或PDFBolt服务中断意味着您的 PDF 生成将完全停止。 5.延迟:与本地处理相比,网络往返会使每次转换增加几秒钟。 6.合规性问题: GDPR、HIPAA 和 SOC2 审计因外部文档处理而变得复杂。 API 密钥安全:泄露的 API 密钥可能导致未经授权的使用,并被计入您的帐户。 8.供应商锁定:如果PDFBolt更改条款或关闭,您的应用程序将无法运行。 PDFBolt与IronPDF对比 关注 PDFBolt IronPDF 数据位置 外部服务器 仅限您的服务器 使用限制 100 次免费,然后按文档收费 无限制 需要互联网 是的,始终 否 延迟 网络往返 毫秒 合规性 复杂(外部处理) 简单(本地处理) 成本模式 按文档 一次性或年度 离线操作 不可能 完全支持 API 关键风险 泄露 = 计费 许可证密钥,无计费风险 对于计划在 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 软件包变更 # Remove PDFBolt dotnet remove package PDFBolt # Install IronPDF dotnet add package IronPdf # Remove PDFBolt dotnet remove package PDFBolt # 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 确定PDFBolt的用法 # Find allPDFBoltreferences grep -r "PDFBolt\|HtmlToPdfConverter\|ConvertHtmlString\|ConvertUrl" --include="*.cs" . # Find API key references grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" . # Find allPDFBoltreferences grep -r "PDFBolt\|HtmlToPdfConverter\|ConvertHtmlString\|ConvertUrl" --include="*.cs" . # Find API key references grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" . SHELL 完整的 API 参考 核心类映射 PDFBolt IronPDF 备注 new HtmlToPdfConverter() new ChromePdfRenderer() 主呈现器 页面大小 PdfPaperSize 纸张尺寸枚举 (返回字节[]) PDF 文档 丰富的文档对象 转换方法映射 PDFBolt IronPDF 备注 converter.ConvertHtmlString(html) renderer.RenderHtmlAsPdf(html) 返回 PdfDocument converter.ConvertUrl(url) renderer.RenderUrlAsPdf(url) 返回 PdfDocument 输出方法映射 PDFBolt IronPDF 备注 File.WriteAllBytes(path,pdf) pdf.SaveAs(路径) 直接保存法 (pdf是字节[]) pdf.BinaryData 获取字节数组 (手动流) pdf.Stream 流属性 页面配置映射 PDFBolt IronPDF 备注 converter.PageSize = PageSize.A4 renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 纸张尺寸枚举 converter.MarginTop = 20 renderer.RenderingOptions.MarginTop = 20 单位:毫米 converter.MarginBottom = 20 renderer.RenderingOptions.MarginBottom = 20 单位:毫米 converter.MarginLeft = 15 renderer.RenderingOptions.MarginLeft = 15 单位:毫米 converter.MarginRight = 15 renderer.RenderingOptions.MarginRight = 15 单位:毫米 页眉/页脚占位符映射 PDFBolt IronPDF 备注 {页码} {page} 当前页面 {总页数} {总页数} 总页数 {日期} {日期} 相同 {标题} {html-title} 文件标题 代码迁移示例 示例 1:将基本 HTML 转换为 PDF. 之前 (PDFBolt): // NuGet: Install-Package PDFBolt using PDFBolt; 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 PDFBolt using PDFBolt; 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; using System.IO; 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; using System.IO; 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 这里的根本区别在于返回类型和保存模式。PDFBolt的 HtmlToPdfConverter.ConvertHtmlString() 返回一个 byte[] ,您必须使用 File.WriteAllBytes() 手动将其写入磁盘。 这需要导入 System.IO 并自行处理文件操作。 IronPDF 的 ChromePdfRenderer.RenderHtmlAsPdf() 返回一个带有内置 SaveAs() 方法的PDF 文档对象。 这种面向对象的方法还有其他好处:您可以在保存之前对 PDF 进行操作(添加水印、合并文档、添加安全性)。 如果您需要原始字节以便与现有代码兼容,请使用 pdf.BinaryData. 有关其他渲染选项,请参阅 HTML to PDF 文档。 示例 2:URL 到 PDF 的转换 之前 (PDFBolt): // NuGet: Install-Package PDFBolt using PDFBolt; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var pdf = converter.ConvertUrl("https://www.example.com"); File.WriteAllBytes("webpage.pdf", pdf); } } // NuGet: Install-Package PDFBolt using PDFBolt; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var pdf = converter.ConvertUrl("https://www.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://www.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://www.example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel PDFBolt 的 URL 转换模式采用与 HTML 转换相同的方法:ConvertUrl() 返回 byte[] ,需要 File.WriteAllBytes() 进行保存。 请注意,即使您已经从 URL 获取数据,PDFBolt 仍然需要通过网络往返其服务器。 IronPDF 的 RenderUrlAsPdf() 方法使用内置的 SaveAs() 方法返回一个PDF 文档。 这里的关键优势在于IronPDF在本地执行 URL 抓取和 PDF 渲染--数据不会离开您的基础架构。 请注意,IronPDF 版本甚至不需要 using System.IO;这个简单的案例。 了解有关 URL 至 PDF 转换的更多信息。 示例 3:带有自定义页面设置的 HTML 文件 之前 (PDFBolt): // NuGet: Install-Package PDFBolt using PDFBolt; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.PageSize = PageSize.A4; converter.MarginTop = 20; converter.MarginBottom = 20; var html = File.ReadAllText("input.html"); var pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); } } // NuGet: Install-Package PDFBolt using PDFBolt; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.PageSize = PageSize.A4; converter.MarginTop = 20; converter.MarginBottom = 20; var html = File.ReadAllText("input.html"); var pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System.IO; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; var html = File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System.IO; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; var html = File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel 本示例展示了页面配置差异。PDFBolt可直接在转换器对象上设置属性(converter.PageSize、converter.MarginTop)。IronPDF在渲染器上使用 RenderingOptions 对象(renderer.RenderingOptions.PaperSize, renderer.RenderingOptions.MarginTop )。 关键映射: PageSize.A4 → PdfPaperSize.A4 (枚举名称不同) MarginTop = 20 → RenderingOptions.MarginTop = 20 (通过 RenderingOptions) 两者都使用毫米作为边距值,因此您现有的边距值应该可以直接转换。 访问PdfPaperSize枚举需要 IronPdf.Rendering 命名空间。 有关其他页面配置选项,请参阅 渲染选项文档。 关键迁移说明 返回类型更改 PDFBolt 可直接返回 byte[] ;IronPDF返回 PdfDocument: //PDFBoltpattern: byte[] pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); //IronPDFpattern: var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or if you need bytes: byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData; //PDFBoltpattern: byte[] pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); //IronPDFpattern: var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or if you need bytes: byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData; $vbLabelText $csharpLabel 类命名更改 主类名称从以转换器为中心改为以呈现器为中心: // PDFBolt var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); // PDFBolt var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 配置模式更改 PDFBolt 使用直接属性;IronPDF使用 RenderingOptions: // PDFBolt: Direct properties converter.PageSize = PageSize.A4; converter.MarginTop = 20; // IronPDF: Via RenderingOptions renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; // PDFBolt: Direct properties converter.PageSize = PageSize.A4; converter.MarginTop = 20; // IronPDF: Via RenderingOptions renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; $vbLabelText $csharpLabel 消除API 关键字 PDFBolt 需要按请求进行 API 密钥管理; IronPdf 使用一次性许可证密钥: // PDFBolt: API key per client (security risk if leaked) var apiKey = config["PDFBolt:ApiKey"]; var client = new Client(apiKey); // IronPDF: License key once at startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; var renderer = new ChromePdfRenderer(); // PDFBolt: API key per client (security risk if leaked) var apiKey = config["PDFBolt:ApiKey"]; var client = new Client(apiKey); // IronPDF: License key once at startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 删除网络错误处理 本地处理意味着无需处理网络错误: // PDFBolt: Network error handling required catch (HttpRequestException ex) catch (TaskCanceledException) catch (TimeoutException) // IronPDF: Remove network-specific catches entirely // PDFBolt: Network error handling required catch (HttpRequestException ex) catch (TaskCanceledException) catch (TimeoutException) // IronPDF: Remove network-specific catches entirely $vbLabelText $csharpLabel 可用的新功能 迁移到IronPDF后,您将获得PDFBolt无法提供的功能: // PDF Merging (not available in PDFBolt) var merged = PdfDocument.Merge(pdf1, pdf2); // Watermarks (not available in PDFBolt) pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>"); // Password Protection (not available in PDFBolt) pdf.SecuritySettings.UserPassword = "secret"; // Text Extraction (not available in PDFBolt) string text = pdf.ExtractAllText(); // PDF to Images (not available in PDFBolt) pdf.RasterizeToImageFiles("page_*.png"); // PDF Merging (not available in PDFBolt) var merged = PdfDocument.Merge(pdf1, pdf2); // Watermarks (not available in PDFBolt) pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>"); // Password Protection (not available in PDFBolt) pdf.SecuritySettings.UserPassword = "secret"; // Text Extraction (not available in PDFBolt) string text = pdf.ExtractAllText(); // PDF to Images (not available in PDFBolt) pdf.RasterizeToImageFiles("page_*.png"); $vbLabelText $csharpLabel 故障排除 问题 1:HtmlToPdfConverter 未找到 问题:IronPDF中不存在HtmlToPdfConverter类。 解决方案:使用ChromePdfRenderer : // PDFBolt var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); // PDFBolt var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 问题 2:未找到 ConvertHtmlString 问题: ConvertHtmlString()方法不存在。 解决方案:使用RenderHtmlAsPdf() : // PDFBolt var pdf = converter.ConvertHtmlString(html); // IronPDF var pdf = renderer.RenderHtmlAsPdf(html); // PDFBolt var pdf = converter.ConvertHtmlString(html); // IronPDF var pdf = renderer.RenderHtmlAsPdf(html); $vbLabelText $csharpLabel 问题 3:未找到 ConvertUrl 问题: ConvertUrl()方法不存在。 解决方案:使用RenderUrlAsPdf() : // PDFBolt var pdf = converter.ConvertUrl(url); // IronPDF var pdf = renderer.RenderUrlAsPdf(url); // PDFBolt var pdf = converter.ConvertUrl(url); // IronPDF var pdf = renderer.RenderUrlAsPdf(url); $vbLabelText $csharpLabel 问题 4:未找到 PageSize 枚举 问题: PageSize枚举不存在。 解决方案:使用IronPdf.Rendering中的PdfPaperSize : // PDFBolt converter.PageSize = PageSize.A4; // IronPDF using IronPdf.Rendering; renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; // PDFBolt converter.PageSize = PageSize.A4; // IronPDF using IronPdf.Rendering; renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; $vbLabelText $csharpLabel 问题 5:首次生成 PDF 的速度很慢 问题:初始渲染时间比预期长。 解决方案: Chromium 引擎在首次使用时初始化。 如有需要,可进行预热: // Warm up during application startup var renderer = new ChromePdfRenderer(); renderer.RenderHtmlAsPdf("<html><body></body></html>"); // Warm up during application startup var renderer = new ChromePdfRenderer(); renderer.RenderHtmlAsPdf("<html><body></body></html>"); $vbLabelText $csharpLabel 迁移清单 迁移前 清点代码库中所有PDFBolt的使用情况 记录当前页面配置设置(页面大小、边距) 识别要移除的 API 密钥管理代码 列出任何要删除的速率限制或网络错误处理程序 获取IronPDF许可证密钥 软件包变更 移除PDFBolt NuGet 包 安装IronPdf NuGet 包: dotnet add package IronPdf 添加using IronPdf;命名空间 添加using IronPdf.Rendering;用于纸张尺寸枚举 代码更改 在启动时添加许可证密钥配置 将HtmlToPdfConverter替换为ChromePdfRenderer 将ConvertHtmlString()替换为RenderHtmlAsPdf() 将ConvertUrl()替换为RenderUrlAsPdf() 将File.WriteAllBytes()替换为pdf.SaveAs() 将PageSize更新为RenderingOptions.PaperSize 将边距属性更新为RenderingOptions.MarginTop等。 移除 API 密钥管理代码 移除速率限制处理代码 移除网络错误处理 后迁移 从配置文件中删除 API 密钥 从密钥管理器中移除 API 密钥 运行所有测试,比较 PDF 输出 验证页面尺寸和边距是否正确显示。 考虑添加新功能(水印、安全、合并) 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# 从 PDF Duo 迁移到 IronPDF如何用 C# 从 Nutrient.io 迁移...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多