跳至页脚内容
迁移指南

如何用 C# 从 Kaizen.io 迁移到 IronPDF

从 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.ioIronPDF
处理云(外部服务器)本地(处理中)
数据隐私外部传输的数据数据永远不会离开您的基础架构
延迟网络往返(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
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</代码>或<代码>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);
    }
}
$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.A4PdfPaperOrientation.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提供了更简洁的 TextHeaderTextFooter 配置,并具有专用的 CenterText, LeftTextRightText 属性。

重要提示:占位符语法有所不同! 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 机器人,将他对技术的热爱与创造力相结合。