跳過到頁腳內容
遷移指南

如何在 C# 中從 Kaizen.io 遷移到 IronPDF

從 Kaizen.io 遷移到 IronPDF:完整的 C# 遷移指南。

從 Kaizen.io HTML-to-PDF 轉換到 IronPDF,可將您的 .NET PDF 工作流程從具有網路延遲和資料隱私疑慮的雲端服務,轉換為可將資料保存在基礎架構內的本機處理中資料庫。 本指南為專業的 .NET 開發人員提供了一個全面、循序漸進的遷移路徑,消除了外部 API 的依賴性和按需求定價的問題。

為什麼要從 Kaizen.io 轉移到 IronPDF?

雲端 API 的挑戰

Kaizen.io HTML-to-PDF 和其他基於雲端的 PDF 服務一樣,會引入影響生產應用程式的限制:

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

2.Data Privacy Concerns:敏感的 HTML 內容 - 包括客戶資料、財務報告和機密文件 - 必須傳輸至第三方伺服器進行處理。

3.網路延遲:每次產生 PDF 都會產生 100-500ms 或更多的網路往返延遲,大幅增加應用程式的回應時間。

4.按要求定價:成本與使用量直接成正比,使得大量 PDF 生成的成本越來越高。

5.速率限制:高流量期間的 API 節流可能會在您最需要的時候造成 PDF 生成失敗或延遲。

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

Kaizen.io vsIronPDF比較

特點Kaizen.ioIronPDF
處理雲端(外部伺服器)本地 (處理中)
資料隱私外部傳輸的資料資料永不離開您的基礎架構
延遲網路往返 (100-500ms+)本地處理 (50-200ms)
可用性依賴外部服務100% 由您掌控
定價按要求或訂閱一次性或年度授權
離線模式不可能完整功能
費率限制API 節流無限制
JavaScript有限支援完整的 Chromium 執行

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


遷移複雜性評估

按功能估計的工作量

特點遷移複雜性筆記
基本 HTML 至 PDF非常低直接方法替換
HTML 檔案轉 PDF非常低直接方法替換
URL 至 PDF非常低直接方法替換
頁首/頁尾占位符語法變更
頁面設定非常低屬性對應
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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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
標頭選項HtmlHeaderFooterTextHeaderFooterHTML/ 文字標題
腳本選項HtmlHeaderFooterTextHeaderFooterHTML/ 文本頁腳
頁面大小<編碼>PdfPaperSize</編碼紙張尺寸枚舉
<編碼>方向</編碼<代碼>PdfPaperOrientation</代碼方向枚舉

方法對應

Kaizen.io 方法IronPdf 同等級產品筆記
converter.Convert(html)renderer.RenderHtmlAsPdf(html)返回 PdfDocument
converter.ConvertUrl(url)renderer.RenderUrlAsPdf(url)直接 URL 支援
File.WriteAllBytes(path, bytes)File.WriteAllBytes(path, bytes)File.WriteAllBytes(path)<代碼>pdf.SaveAs(路徑)</代碼直接儲存方法

轉換選項屬性對應

Kaizen.io 財產IronPdf 同等級產品筆記
頁面大小RenderingOptions.PaperSize枚舉值
<編碼>方向</編碼<編碼>RenderingOptions.PaperOrientation</編碼肖像/風景
MarginTopRenderingOptions.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.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

本範例展示了幾個關鍵的轉換差異。 Kaizen.io 需要在轉換選項內嵌套標頭選項腳本選項物件,每個物件都有一個 HtmlContent 屬性。IronPDF提供了更簡潔的 TextHeaderTextFooter 設定,並具有專用的 CenterText, LeftTextRightText 屬性。

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

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
$vbLabelText   $csharpLabel

完整的占位符映射: -{page}{page}(相同) -{總計}{總頁數}(不同!) -<編碼>{標題}</編碼→<編碼>{html-title}</編碼(DIFFERENT!) -<編碼>{日期}</編碼→<編碼>{日期}</編碼(相同)

  • {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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

疑難排解

問題 1:HtmlToPdfConverter 未找到

問題HtmlToPdfConverter class 在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
$vbLabelText   $csharpLabel

問題 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
$vbLabelText   $csharpLabel

問題 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
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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>");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

遷移清單

預遷移

  • [ ] 識別所有 Kaizen.io using 語句
  • [ ] 使用的文件轉換選項設定
  • [ ] 注意標題/頁尾模板和占位符
  • [ ] 列出 API 金鑰位置 (移除)
  • [ ] 檢查重試/速率限制邏輯(刪除)
  • [ ] 獲得 IronPdf 授權金鑰

套件變更

  • [ ] 移除 Kaizen.HtmlToPdf 套件
  • [ ] 安裝 IronPDF NuGet 套件:dotnet add package 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.類別HtmlToPdfConverterChromePdfRenderer. 3.方法Convert()RenderHtmlAsPdf() 4.選項ConversionOptionsRenderingOptions 5.Placeholder{total}{total-pages} 6.API關鍵字:按要求 → 啟動時啟用許可金鑰

探索完整的IronPdf文件教程API參考,加速您的Kaizen.io遷移。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。