跳至頁尾內容
移民指南

如何使用 C# 將 Kaizen.io 移轉到 IronPDF

從 Kaizen.io HTML-to-PDF 遷移到 IronPDF,將您的 .NET PDF 工作流程從依賴雲端服務(存在網路延遲和資料隱私問題)轉變為本機進程內庫,從而將您的資料保留在您的基礎架構內。 本指南為專業 .NET 開發人員提供了一個全面的、分步的遷移路徑,消除了對外部 API 的依賴以及按請求計費的方式。

為什麼要從 Kaizen.io 遷移到 IronPDF

基於雲端的 API 挑戰

Kaizen.io HTML 轉 PDF 服務與其他基於雲端的 PDF 服務一樣,存在一些限制,會影響生產應用:

1.對雲端的依賴:需要持續的網路連線和外部服務的可用性。 如果 Kaizen.io 服務發生故障,您的應用程式的 PDF 產生功能將停止運作。

2.資料隱私問題:敏感的 HTML 內容(包括客戶資料、財務報告和機密文件)必須傳輸到第三方伺服器進行處理。

3.網路延遲:每次產生 PDF 都會產生 100-500 毫秒或更長的網路往返延遲,這會為應用程式的回應時間帶來顯著的開銷。

4.依請求定價:成本與使用量成正比,因此大批量產生 PDF 的成本越來越高。

5.速率限制:在高流量期間,API 限速可能會導致 PDF 產生失敗或延遲,而這正是您最需要它們的時候。

6.供應商鎖定: API 變更或服務終止風險使您的應用程式容易受到外部業務決策的影響。

Kaizen.io 與 IronPDF 對比

特徵Kaizen.ioIronPDF
加工雲端(外部伺服器)本地(進程中)
資料隱私向外傳輸的數據數據永遠不會離開您的基礎設施。
延遲網路往返時間(100-500毫秒以上)本地處理(50-200毫秒)
可用性取決於外部服務100% 由您掌控
定價按請求或訂閱一次性或年度許可
離線模式不可能完整功能
速率限制API限流無限制
JavaScript支持有限完整的 Chromium 執行

對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個面向未來的基礎,其本地處理消除了對外部服務的依賴。


遷移複雜度評估

各功能預計工作量

特徵遷移複雜性筆記
基本 HTML 轉 PDF非常低直接替代法
HTML 檔案轉 PDF非常低直接替代法
PDF檔案的URL非常低直接替代法
頁首/頁尾低的佔位符語法更改
頁面設定非常低屬性映射
API金鑰管理低的完全刪除

範式轉移

Kaizen.io這次遷移的根本轉變在於從雲端API呼叫轉向本地進程內渲染:

Kaizen.io:HtmlToPdfConverter → Convert(html) → byte[](透過網路)
IronPDF:ChromePdfRenderer → RenderHtmlAsPdf(html) → PdfDocument (local)

開始之前

先決條件

  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當量筆記
HtmlToPdfConverterChromePdfRenderer主轉換器
ConversionOptionsChromePdfRenderOptions透過RenderingOptions
HeaderOptionsHtmlHeaderFooterTextHeaderFooterHTML/文字標題
FooterOptionsHtmlHeaderFooterTextHeaderFooterHTML/文字頁腳
PageSizePdfPaperSize紙張尺寸編號
OrientationPdfPaperOrientation方向枚舉

方法映射

Kaizen.io 方法IronPDF當量筆記
converter.Convert(html)renderer.RenderHtmlAsPdf(html)返回 PDF 文檔
converter.ConvertUrl(url)renderer.RenderUrlAsPdf(url)直接 URL 支持
File.WriteAllBytes(path, bytes)pdf.SaveAs(path)直接保存方法

ConversionOptions 屬性映射

Kaizen.io 物業IronPDF當量筆記
PageSizeRenderingOptions.PaperSize列舉值
OrientationRenderingOptions.PaperOrientation人像/風景
MarginTopRenderingOptions.MarginTop單位:毫米
MarginBottomRenderingOptions.MarginBottom單位:毫米
Header.HtmlContentRenderingOptions.HtmlHeader.HtmlFragment頭部 HTML
Footer.HtmlContentRenderingOptions.HtmlFooter.HtmlFragment頁尾 HTML

佔位符映射

Kaizen.io佔位符IronPDF佔位符筆記
{page}{page}目前頁面(相同)
{total}{total-pages}總頁數(不同!)
{date}{date}目前日期(相同)
{title}{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

(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 轉 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

(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 檔案內容,建立一個單獨的ConversionOptions對象,將兩者傳遞給Convert()方法,然後手動將結果位元組寫入檔案。

IronPDF 提供了一個專門的RenderHtmlFileAsPdf()方法,可以直接讀取文件-無需手動讀取文件。 配置設定在渲染器的RenderingOptions屬性中,所有設定都集中在一個地方。 PdfPaperSize.A4PdfPaperOrientation.Portrait枚舉直接映射自 Kaizen.io 的對應枚舉。

範例 3:帶有頁首和頁尾的 PDF 檔案的 URL

(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

(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 要求ConversionOptions中嵌套HeaderOptionsFooterOptions對象,每個對像都有一個HtmlContent屬性。 IronPDF 提供更簡潔的TextHeaderTextFooter配置,具有專用的CenterTextLeftTextRightText屬性。

重要提示:佔位符語法有所不同! Kaizen.io 使用{total}表示總頁數,而 IronPDF 則使用{total-pages}表示總頁數。 這是最常見的遷移問題—在您的程式碼庫中搜尋{total}並將其替換為{total-pages}

IronPDF 的RenderUrlAsPdf()方法透過 Chromium 引擎直接渲染任何 URL 並執行完整的 JavaScript 程式碼——無需任何變通方法。 了解更多關於URL轉PDF以及頁首和頁尾的資訊。


關鍵遷移說明

佔位符語法更改

遷移頁首和頁尾時最重要的變化是佔位符語法:

// Kaizen.io placeholders:
"Page {page} of {total}"

// IronPDF placeholders:
"Page {page} of {total-pages}"
// Kaizen.io placeholders:
"Page {page} of {total}"

// IronPDF placeholders:
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

完整的佔位符映射:

  • {page}{page} (相同)
  • {total}{total-pages} (不同!)
  • {title}{html-title} (不同!)
  • {date}{date} (相同)
  • {time}{time} (相同)

返回類型變更

Kaizen.io 直接回到byte[] 。 IronPDF 回傳一個PdfDocument物件:

// Kaizen.io returns byte[]
byte[] pdfBytes = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdfBytes);

// IronPDF returns 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);

// IronPDF returns 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:未找到 ConversionOptions

問題: 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}"

// IronPDF syntax
"Page {page} of {total-pages}"
// Kaizen.io syntax (won't work)
"Page {page} of {total}"

// IronPDF syntax
"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()
  • 更新佔位符語法( {total}{total-pages}
  • File.WriteAllBytes()替換為pdf.SaveAs()
  • 移除 API 金鑰配置
  • 刪除重試/速率限制邏輯
  • 移除 API 呼叫的網路錯誤處理

測試

  • 測試所有 PDF 生成路徑
  • 驗證頁首/頁尾渲染效果
  • 檢查佔位符渲染
  • 驗證頁邊距和頁面尺寸
  • 測試離線功能(新功能!)
  • 基準性能改進

移民後

  • 從設定中移除 Kaizen.io API 金鑰
  • 更新環境變數
  • 移除速率限製配置
  • 更新監控/警報

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。