如何用 C# 从 Kaizen.io 迁移到 IronPDF
从 Kaizen.io 迁移到 IronPDF:完整的 C# 迁移指南。
从 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-500ms 或更多的网络往返延迟,从而大大增加应用程序的响应时间。
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(本地)开始之前
前提条件
1..NET环境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet 访问:安装 NuGet 软件包的能力 3.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许可配置
// 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";IRON VB CONVERTER ERROR developers@ironsoftware.com确定 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" .完整的 API 参考
类映射
| Kaizen.io 类 | IronPdf 同等产品 | 备注 |
|---|---|---|
| <代码>HtmlToPdfConverter</代码 | <代码>ChromePdfRenderer</代码 | 主要转换器 |
| <代码>转换选项</代码 | <代码>ChromePdfRenderOptions</代码 | 通过 RenderingOptions |
| <代码>标题选项</代码 | <代码>HtmlHeaderFooter</代码>或<代码>TextHeaderFooter</代码 | HTML/ 文本标题 |
| <代码>脚注选项</代码 | <代码>HtmlHeaderFooter</代码>或<代码>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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comKaizen.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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comKaizen.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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本例展示了几个关键的迁移差异。 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}"IRON VB CONVERTER ERROR developers@ironsoftware.com完整的占位符映射: -{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 neededIRON VB CONVERTER ERROR developers@ironsoftware.com移除 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 neededIRON VB CONVERTER ERROR developers@ironsoftware.com删除网络错误处理
删除重试逻辑、速率限制处理和网络超时代码-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;IRON VB CONVERTER ERROR developers@ironsoftware.com故障排除
问题 1:HtmlToPdfConverter 未找到
问题:HtmlToPdfConverter 类在IronPDF中不存在。
解决方案:替换为 ChromePdfRenderer:
// Kaizen.io
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();// Kaizen.io
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.com问题 2:未找到转换选项
问题:ConversionOptions 类在IronPDF中不存在。
解决方案:在呈现器上使用 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);IRON VB CONVERTER ERROR developers@ironsoftware.com问题 3:页码不起作用
问题:页脚显示字面<代码>{总计}</代码而不是页数。
解决方案:更新占位符语法:
// 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}"IRON VB CONVERTER ERROR developers@ironsoftware.com问题 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;IRON VB CONVERTER ERROR developers@ironsoftware.com问题 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>");IRON VB CONVERTER ERROR developers@ironsoftware.com迁移清单
迁移前
- [ ] 识别所有 Kaizen.io
using语句 - [使用的文档<代码>转换选项</代码设置
- [ ] 注意页眉/页脚模板和占位符
- [ ] 列出 API 密钥位置(删除)
- [ ] 检查重试/速率限制逻辑(删除)
- [ ] 获取 IronPdf 许可证密钥
软件包变更
- [ ] 删除
Kaizen.HtmlToPdf包 - [ ] 安装
IronPDFNuGet 软件包:<代码>dotnet 添加软件包 IronPdf - [更新命名空间导入
代码更改
- [ ] 在启动时添加许可证密钥配置
- [ ] 将<代码>HtmlToPdfConverter</代码替换为
ChromePdfRenderer - [ ] 将<代码>转换选项</代码转换为
RenderingOptions - [ ] 将
Convert()更新为RenderHtmlAsPdf()。 - [ ] 将
ConvertUrl()更新为RenderUrlAsPdf()。 - [ ] 更新占位符语法 (
{total}→{total-pages}) - [将
File.WriteAllBytes()替换为pdf.SaveAs()。 - [ ] 删除 API 密钥配置
- [删除重试/速率限制逻辑
- [ ] 删除 API 调用的网络错误处理
测试
- [ ] 测试所有 PDF 生成路径
- [ ] 验证页眉/页脚渲染
- [ ] 检查占位符的呈现
- [ ] 验证页边距和页面大小
- [ ] 测试离线功能(新功能!)。
- [ ] 基准性能改进
后迁移
- [ ] 从配置中删除 Kaizen.io API 密钥
- [ ] 更新环境变量
- [ ] 删除速率限制配置
- [更新监控/警报
结论
从 Kaizen.io 迁移到IronPDF可以消除云依赖性、网络延迟和数据隐私问题,同时提供可预测的许可成本。 从云 API 调用到本地进程内渲染的模式转变意味着您的 PDF 生成将变得更快、更可靠,并且完全由您控制。
本次迁移的主要变化有 1.处理:云(外部服务器)→本地(进程中) 2.类:<代码>HtmlToPdfConverter</代码> → <代码>ChromePdfRenderer</代码 3.方法:<代码>Convert()</代码> → <代码>RenderHtmlAsPdf()</代码 4.选项:<代码>ConversionOptions</代码> → <代码>RenderingOptions</代码 5.占位符:{total} → {total-pages} 6.API关键字:按请求 → 启动时的许可密钥






