MIGRATION GUIDES How to Migrate from Kaizen.io to IronPDF in C# Curtis Chau 發表日期:2026年1月25日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 從 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.io IronPDF 加工 雲端(外部伺服器) 本地(進程中) 資料隱私 向外傳輸的數據 數據永遠不會離開您的基礎設施。 延遲 網路往返時間(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) 開始之前 先決條件 .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 存取權限:能夠安裝 NuGet 套件 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 主轉換器 ConversionOptions ChromePdfRenderOptions 透過RenderingOptions HeaderOptions HtmlHeaderFooter或TextHeaderFooter HTML/文字標題 FooterOptions HtmlHeaderFooter或TextHeaderFooter HTML/文字頁腳 PageSize PdfPaperSize 紙張尺寸編號 Orientation PdfPaperOrientation 方向枚舉 方法映射 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當量 筆記 PageSize RenderingOptions.PaperSize 列舉值 Orientation RenderingOptions.PaperOrientation 人像/風景 MarginTop RenderingOptions.MarginTop 單位:毫米 MarginBottom RenderingOptions.MarginBottom 單位:毫米 Header.HtmlContent RenderingOptions.HtmlHeader.HtmlFragment 頭部 HTML Footer.HtmlContent RenderingOptions.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.A4和PdfPaperOrientation.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中嵌套HeaderOptions和FooterOptions對象,每個對像都有一個HtmlContent屬性。 IronPDF 提供更簡潔的TextHeader和TextFooter配置,具有專用的CenterText 、 LeftText和RightText屬性。 重要提示:佔位符語法有所不同! 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 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多 發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多 發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多 How to Migrate from MigraDoc to IronPDF in C#How to Migrate from jsreport to Iro...
發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多
發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多
發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多