迁移指南 如何用 C# 从 Kaizen.io 迁移到 IronPDF Curtis Chau 已发布:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从 Kaizen.io HTML-to-PDF 迁移到IronPDF可将您的 .NET PDF 工作流程从依赖云的服务(存在网络延迟和数据隐私问题)转变为本地进程内库,从而将您的数据保存在您的基础架构内。 本指南为专业的 .NET 开发人员提供了一个全面的、循序渐进的迁移路径,消除了外部 API 依赖性和按请求定价的问题。 为什么要从 Kaizen.io 迁移到 IronPDF. 基于云的 API 挑战 与其他基于云的 PDF 服务一样,Kaizen.io HTML-to-PDF 也会引入影响生产应用的限制: 1.对云的依赖:需要持续的互联网连接和外部服务的可用性。 如果 Kaizen.io 服务出现停机,您的应用程序的 PDF 生成将停止工作。 2.数据隐私问题:敏感的 HTML 内容(包括客户数据、财务报告和机密文件)必须传输到第三方服务器进行处理。 3.网络延迟:每次生成 PDF 都会产生 100-500 毫秒或更长的网络往返延迟,这会给应用程序的响应时间带来显著的开销。 4.按请求定价:成本与使用量成正比,因此大批量生成 PDF 的成本越来越高。 5.速率限制:在高流量期间限制 API 速率可能会导致 PDF 生成失败或延迟,而这恰恰是您最需要它们的时候。 6.供应商锁定: API 变更或服务终止风险使您的应用程序容易受到外部业务决策的影响。 Kaizen.io 与IronPDF对比 特征 Kaizen.io IronPDF 处理 云(外部服务器) 本地(处理中) 数据隐私 外部传输的数据 数据永远不会离开您的基础架构 延迟 网络往返(100-500ms 以上) 本地处理(50-200 毫秒) 可用性 取决于外部服务 100% 由您控制 定价 按请求或订阅 一次性或年度许可 离线模式 不可能 全部功能 费率限制 API 节流 无限制 JavaScript 有限支持 全面执行 Chromium 对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了一个面向未来的基础,其本地处理消除了外部服务依赖性。 迁移复杂性评估 按功能估算的工作量 特征 迁移复杂性 备注 基本 HTML 到 PDF 极低 直接方法替换 HTML 文件到 PDF 极低 直接方法替换 URL 至 PDF 极低 直接方法替换 页眉/页脚 低 占位符语法更改 页面设置 极低 属性映射 API 密钥管理 低 完全删除 范式转换 Kaizen.io此次迁移的根本转变在于从云端API调用转向本地进程内渲染: Kaizen.io.HtmlToPdfConverter HtmlToPdfConverter → Convert(html) → byte[] (通过网络) IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(html) → PdfDocument(本地) 开始之前 前提条件 .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 访问权限:能够安装 NuGet 包 IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。 NuGet 软件包变更 # Remove Kaizen.io package dotnet remove package Kaizen.HtmlToPdf dotnet remove package Kaizen.IO.HtmlToPdf # Install IronPDF dotnet add package IronPdf # Remove Kaizen.io package dotnet remove package Kaizen.HtmlToPdf dotnet remove package Kaizen.IO.HtmlToPdf # 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 确定 Kaizen.io 的用法 # Find all Kaizen.io references grep -r "using Kaizen\|HtmlToPdfConverter\|ConversionOptions" --include="*.cs" . grep -r "ConvertUrl\|ConvertHtml\|Kaizen" --include="*.cs" . # Find all Kaizen.io references grep -r "using Kaizen\|HtmlToPdfConverter\|ConversionOptions" --include="*.cs" . grep -r "ConvertUrl\|ConvertHtml\|Kaizen" --include="*.cs" . SHELL 完整的 API 参考 类映射 Kaizen.io 类 IronPdf 同等产品 备注 HtmlToPdfConverter ChromePdfRenderer 主要转换器 转换选项 ChromePdfRenderOptions 通过 RenderingOptions 标题选项 HtmlHeaderFooter</code>或TextHeaderFooter` HTML/ 文本标题 脚注选项 HtmlHeaderFooter</code>或<code>TextHeaderFooter HTML/ 文本页脚 页面大小 PdfPaperSize 纸张尺寸枚举 方向 PdfPaperOrientation 方向枚举 方法映射 Kaizen.io 方法 IronPdf 同等产品 备注 converter.Convert(html) renderer.RenderHtmlAsPdf(html) 返回 PdfDocument converter.ConvertUrl(url) renderer.RenderUrlAsPdf(url) 支持直接 URL File.WriteAllBytes(path,字节) pdf.SaveAs(路径) 直接保存法 转换选项属性映射 Kaizen.io 属性 IronPdf 同等产品 备注 页面大小 RenderingOptions.PaperSize 枚举值 方向 RenderingOptions.PaperOrientation 肖像/风景 页边距 RenderingOptions.MarginTop 单位:毫米 边距下限 RenderingOptions.MarginBottom 单位:毫米 Header.HtmlContent RenderingOptions.HtmlHeader.HtmlFragment 标题 HTML Footer.HtmlContent RenderingOptions.HtmlFooter.HtmlFragment 页脚 HTML 占位符映射 Kaizen.io 占位符 IronPdf 占位符 备注 {page} {page} 当前页面(相同) {总计} {总页数} 总页数(不同) {日期} {日期} 当前日期(相同) {标题} {html-title} 文件标题(不同) 代码迁移示例 示例 1:将基本 HTML 转换为 PDF. 之前 (Kaizen.io): using Kaizen.IO; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdfBytes = converter.Convert(html); File.WriteAllBytes("output.pdf", pdfBytes); } } using Kaizen.IO; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdfBytes = converter.Convert(html); File.WriteAllBytes("output.pdf", pdfBytes); } } $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 Kaizen.io 方法创建一个HtmlToPdfConverter,调用Convert()获得一个字节数组,然后使用File.WriteAllBytes()` 手动将字节写入文件。 这涉及到 Kaizen.io 云服务的网络往返。 IronPDF 的ChromePdfRenderer在本地处理所有内容。 RenderHtmlAsPdf() 方法返回一个 PdfDocument 对象,该对象具有一个方便的 SaveAs() 方法--无需手动处理字节数组,也没有网络延迟。 有关其他渲染选项,请参阅 HTML to PDF 文档。 示例 2:使用页面设置将 HTML 文件转换为 PDF 文件 之前 (Kaizen.io): using Kaizen.IO; using System; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var htmlContent = File.ReadAllText("input.html"); var options = new ConversionOptions { PageSize = PageSize.A4, Orientation = Orientation.Portrait }; var pdfBytes = converter.Convert(htmlContent, options); File.WriteAllBytes("document.pdf", pdfBytes); } } using Kaizen.IO; using System; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var htmlContent = File.ReadAllText("input.html"); var options = new ConversionOptions { PageSize = PageSize.A4, Orientation = Orientation.Portrait }; var pdfBytes = converter.Convert(htmlContent, options); File.WriteAllBytes("document.pdf", pdfBytes); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using System; using System.IO; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; var pdf = renderer.RenderHtmlFileAsPdf("input.html"); pdf.SaveAs("document.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; using System.IO; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; var pdf = renderer.RenderHtmlFileAsPdf("input.html"); pdf.SaveAs("document.pdf"); } } $vbLabelText $csharpLabel Kaizen.io 方法要求使用 File.ReadAllText() 手动读取 HTML 文件内容,创建一个单独的转换选项对象,将两者传递给 Convert() 方法,然后手动将结果字节写入文件。 IronPDF 提供了专门的 RenderHtmlFileAsPdf() 方法,可直接读取文件--无需手动读取文件。 配置设置在呈现器的 RenderingOptions 属性上,将所有设置集中在一处。 PdfPaperSize.A4和PdfPaperOrientation.Portrait枚举直接映射自 Kaizen.io 的对应枚举。 示例 3:带页眉和页脚的 URL 至 PDF 文件 之前 (Kaizen.io): using Kaizen.IO; using System; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var options = new ConversionOptions { Header = new HeaderOptions { HtmlContent = "<div style='text-align:center'>Company Header</div>" }, Footer = new FooterOptions { HtmlContent = "<div style='text-align:center'>Page {page} of {total}</div>" }, MarginTop = 20, MarginBottom = 20 }; var pdfBytes = converter.ConvertUrl("https://example.com", options); File.WriteAllBytes("webpage.pdf", pdfBytes); } } using Kaizen.IO; using System; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var options = new ConversionOptions { Header = new HeaderOptions { HtmlContent = "<div style='text-align:center'>Company Header</div>" }, Footer = new FooterOptions { HtmlContent = "<div style='text-align:center'>Page {page} of {total}</div>" }, MarginTop = 20, MarginBottom = 20 }; var pdfBytes = converter.ConvertUrl("https://example.com", options); File.WriteAllBytes("webpage.pdf", pdfBytes); } } $vbLabelText $csharpLabel After (IronPDF): // NuGet: Install-Package IronPdf using IronPdf; using System; using System.IO; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader.CenterText = "Company Header"; renderer.RenderingOptions.TextFooter.CenterText = "Page {page} of {total-pages}"; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; var pdf = renderer.RenderUrlAsPdf("https://example.com"); pdf.SaveAs("webpage.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; using System.IO; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader.CenterText = "Company Header"; renderer.RenderingOptions.TextFooter.CenterText = "Page {page} of {total-pages}"; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; var pdf = renderer.RenderUrlAsPdf("https://example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel 本例展示了几个关键的迁移差异。 Kaizen.io 需要在转换选项中嵌套标题选项和脚注选项对象,每个对象都有一个 HtmlContent 属性。IronPDF提供了更简洁的 TextHeader 和 TextFooter 配置,并具有专用的 CenterText, LeftText 和 RightText 属性。 重要提示:占位符语法有所不同! Kaizen.io 使用{总计}表示总页数,而IronPDF使用{总页数}表示总页数。 这是最常见的迁移问题--搜索代码库中的{总计}并替换为 {total-pages}。 IronPDF 的 RenderUrlAsPdf() 方法可通过 Chromium 引擎直接以完整的JavaScript执行方式渲染任何 URL,无需任何变通方法。 了解有关 URL 到 PDF 转换和 页眉和页脚的更多信息。 关键迁移说明 替换语法 在迁移页眉和页脚时,最重要的变化是占位符语法: // Kaizen.io placeholders: "Page {page} of {total}" //IronPDFplaceholders: "Page {page} of {total-pages}" // Kaizen.io placeholders: "Page {page} of {total}" //IronPDFplaceholders: "Page {page} of {total-pages}" $vbLabelText $csharpLabel 完整的占位符映射: -{page}→{page}(相同) -{总计}→{总页数}(不同!)。 -{标题}→{html-title}(不同!)。 -{日期}→{日期}(相同) {time} → {time} (相同) 返回类型更改 Kaizen.io 直接返回 byte[] 。IronPDF返回一个 PdfDocument 对象: // Kaizen.io returns byte[] byte[] pdfBytes = converter.Convert(html); File.WriteAllBytes("output.pdf", pdfBytes); //IronPDFreturns PdfDocument var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Direct save byte[] bytes = pdf.BinaryData; // Or get bytes if needed // Kaizen.io returns byte[] byte[] pdfBytes = converter.Convert(html); File.WriteAllBytes("output.pdf", pdfBytes); //IronPDFreturns PdfDocument var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Direct save byte[] bytes = pdf.BinaryData; // Or get bytes if needed $vbLabelText $csharpLabel 移除 API 密钥管理 Kaizen.io 要求按请求进行 API 密钥验证。IronPDF使用在应用程序启动时设置一次的许可证密钥: // DELETE this Kaizen.io pattern: var converter = new HtmlToPdfConverter("YOUR_API_KEY"); // IronPDF: Set once at startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; var renderer = new ChromePdfRenderer(); // No API key needed // DELETE this Kaizen.io pattern: var converter = new HtmlToPdfConverter("YOUR_API_KEY"); // IronPDF: Set once at startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; var renderer = new ChromePdfRenderer(); // No API key needed $vbLabelText $csharpLabel 删除网络错误处理 删除重试逻辑、速率限制处理和网络超时代码-IronPDF 在本地处理: // DELETE this Kaizen.io pattern: int retries = 3; while (retries > 0) { try { return converter.Convert(html); } catch (RateLimitException) { retries--; Thread.Sleep(1000); } } // IronPDF: Just call the method return renderer.RenderHtmlAsPdf(html).BinaryData; // DELETE this Kaizen.io pattern: int retries = 3; while (retries > 0) { try { return converter.Convert(html); } catch (RateLimitException) { retries--; Thread.Sleep(1000); } } // IronPDF: Just call the method return renderer.RenderHtmlAsPdf(html).BinaryData; $vbLabelText $csharpLabel 故障排除 问题 1:HtmlToPdfConverter 未找到 问题:IronPDF中不存在HtmlToPdfConverter类。 解决方案:替换为ChromePdfRenderer : // Kaizen.io var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); // Kaizen.io var converter = new HtmlToPdfConverter(); // IronPDF var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 问题 2:未找到转换选项 问题:IronPDF中不存在ConversionOptions类。 解决方案:在渲染器上使用RenderingOptions : // Kaizen.io var options = new ConversionOptions { PageSize = PageSize.A4 }; converter.Convert(html, options); // IronPDF renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderHtmlAsPdf(html); // Kaizen.io var options = new ConversionOptions { PageSize = PageSize.A4 }; converter.Convert(html, options); // IronPDF renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderHtmlAsPdf(html); $vbLabelText $csharpLabel 问题 3:页码不起作用 问题:页脚显示的是字面值{total}而不是页数。 解决方案:更新占位符语法: // Kaizen.io syntax (won't work) "Page {page} of {total}" //IronPDFsyntax "Page {page} of {total-pages}" // Kaizen.io syntax (won't work) "Page {page} of {total}" //IronPDFsyntax "Page {page} of {total-pages}" $vbLabelText $csharpLabel 问题 4:未找到转换方法 问题: ChromePdfRenderer中不存在Convert()方法。 解决方案:使用RenderHtmlAsPdf() : // Kaizen.io var pdfBytes = converter.Convert(html); // IronPDF var pdf = renderer.RenderHtmlAsPdf(html); var pdfBytes = pdf.BinaryData; // Kaizen.io var pdfBytes = converter.Convert(html); // IronPDF var pdf = renderer.RenderHtmlAsPdf(html); var pdfBytes = pdf.BinaryData; $vbLabelText $csharpLabel 问题 5:首次渲染缓慢 问题:首次生成 PDF 文件需要 1-3 秒。 解决方案:IronPDF会在首次使用时初始化 Chromium。 在应用程序启动时预热: // In Program.cs or Startup.cs: new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>"); // In Program.cs or Startup.cs: new ChromePdfRenderer().RenderHtmlAsPdf("<html></html>"); $vbLabelText $csharpLabel 迁移清单 迁移前 识别所有 Kaizen.io using语句 使用的文档ConversionOptions设置 注意页眉/页脚模板和占位符 列出 API 密钥位置(要删除) 检查重试/速率限制逻辑(以删除) 获取IronPDF许可证密钥 软件包变更 移除Kaizen.HtmlToPdf包 安装IronPdf NuGet 包: dotnet add package IronPdf 更新命名空间导入 代码更改 在启动时添加许可证密钥配置 将HtmlToPdfConverter替换为ChromePdfRenderer 将ConversionOptions转换为RenderingOptions 将Convert()更新为RenderHtmlAsPdf() 将ConvertUrl()更新为RenderUrlAsPdf() 更新占位符语法({总计}→{总页数}) 将File.WriteAllBytes()替换为pdf.SaveAs() 移除 API 密钥配置 删除重试/速率限制逻辑 移除 API 调用的网络错误处理 测试 测试所有 PDF 生成路径 验证页眉/页脚渲染效果 检查占位符渲染 验证页边距和页面尺寸 测试离线功能(新功能!) 基准性能改进 后迁移 从配置中移除 Kaizen.io 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# 从 MigraDoc 迁移到 IronPDF如何用 C# 从 jsreport 迁移到...
已发布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 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多