如何在 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.io | IronPDF |
|---|---|---|
| 處理 | 雲端(外部伺服器) | 本地 (處理中) |
| 資料隱私 | 外部傳輸的資料 | 資料永不離開您的基礎架構 |
| 延遲 | 網路往返 (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授權組態
// 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, bytes)File.WriteAllBytes(path, bytes)File.WriteAllBytes(path) | <代碼>pdf.SaveAs(路徑)</代碼 | 直接儲存方法 |
轉換選項屬性對應
| Kaizen.io 財產 | IronPdf 同等級產品 | 筆記 |
|---|---|---|
頁面大小 | RenderingOptions.PaperSize | 枚舉值 |
| <編碼>方向</編碼 | <編碼>RenderingOptions.PaperOrientation</編碼 | 肖像/風景 |
MarginTop | 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則使用{總頁數}表示總頁數。 這是最常見的遷移問題-搜尋您的程式碼庫中的{總計}並將其取代為{總頁數}。
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}</編碼(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 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 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問題 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 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.類別:HtmlToPdfConverter → ChromePdfRenderer. 3.方法:Convert() → RenderHtmlAsPdf() 4.選項:ConversionOptions → RenderingOptions 5.Placeholder:{total} → {total-pages} 6.API關鍵字:按要求 → 啟動時啟用許可金鑰






