MIGRATION GUIDES How to Migrate from pdforge 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 上分享 複製連結 電子郵件文章 為什麼要從pdforge遷移到IronPDF 了解 pdforge pdforge 是一個基於雲端的 PDF 生成 API,它提供了一種透過 API 呼叫與您的應用程式整合來產生 PDF 文件的簡單方法。 透過將 PDF 創建任務外包給外部 API,開發人員可以簡化開發流程。 然而,pdforge 也存在一些缺點,例如外部依賴項、有限的自訂選項以及持續的訂閱費用,開發者應該注意這些。 雲端 API 依賴問題 pdforge 在外部雲端伺服器上處理所有文件。 這種架構會為生產應用帶來重大問題: 1.外部伺服器處理:您產生的每個 PDF 都需要將您的 HTML/資料傳送到 pdforge 的伺服器-您的文件將離開您的基礎架構。 2.隱私和合規風險:敏感資料透過網路傳輸到第三方伺服器。 使用 pdforge 時,開發人員需要考慮與向外部 API 發送資料相關的安全性問題。 如果PDF內容包含敏感資訊,這可能是需要重點考慮的問題。 3.持續訂閱成本:每月費用無限期累積,且不涉及資產所有權。 pdforge 的 SaaS 模式引入了持續的營運支出,這些支出會隨著時間的推移而累積。 4.網路依賴性:網路不可用時無法產生 PDF 檔案。 5.速率限制: API 使用上限可能會限制高流量應用程式。 6.網路延遲:往返時間會使每次 PDF 產生增加幾秒鐘。 pdforge 與 IronPDF 對比 特徵 pdforge IronPDF 部署類型 基於雲端的 API 本地圖書館 依賴關係 需要互聯網和 API 身份驗證 無外部依賴 客製化 對 PDF 產生的控制有限 完全掌控自訂功能 成本結構 持續訂閱 一次性購買選項 安全 透過網路傳輸的資料可能有問題 資料處理完全在本地環境中進行 設定複雜度 由於外部操作,初始設定更加簡便。 需要更多初始設定和配置 IronPDF 的獨特之處在於它提供了一個完全本地化的程式庫,使開發人員能夠完全控制 PDF 創建過程。 對於偏好內部文件處理的應用,或外部 API 呼叫會引入安全性問題的應用來說,這尤其有利。 IronPDF 在本地處理所有數據,最大限度地降低此類風險。 對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個本地處理基礎,消除了對雲端的依賴,同時增加了全面的 PDF 操作功能。 開始之前 先決條件 .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 存取權限:能夠安裝 NuGet 套件 IronPDF 許可證:請從ironpdf.com取得您的許可證密鑰。 NuGet 套件變更 # Remove pdforge packages dotnet remove package pdforge dotnet remove package PdfForge # Install IronPDF dotnet add package IronPdf # Remove pdforge packages dotnet remove package pdforge dotnet remove package PdfForge # 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 識別 pdforge 使用情況 # Find pdforge usage grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" . # Find placeholder patterns to migrate grep -r "{totalPages}" --include="*.cs" . # Find pdforge usage grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" . # Find placeholder patterns to migrate grep -r "{totalPages}" --include="*.cs" . SHELL 完整 API 參考 命名空間變更 // Before: pdforge using PdfForge; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; // Before: pdforge using PdfForge; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; $vbLabelText $csharpLabel 核心類別映射 pdforge IronPDF 筆記 HtmlToPdfConverter ChromePdfRenderer 主 PDF 產生器 PdfClient ChromePdfRenderer API 用戶端等效項 PageSize.A4 PdfPaperSize.A4 紙張尺寸編號 PageOrientation.Landscape PdfPaperOrientation.Landscape 方向枚舉 傳回類型: byte[] PdfDocument 結果對象 方法映射 pdforge IronPDF 筆記 converter.ConvertHtmlString(html) renderer.RenderHtmlAsPdf(html) 將 HTML 字串轉換為 PDF converter.ConvertUrl(url) renderer.RenderUrlAsPdf(url) PDF檔案的URL File.WriteAllBytes(path, bytes) pdf.SaveAs(path) 儲存到磁碟 傳回類型: byte[] pdf.BinaryData 取得原始位元組 配置映射 pdforge IronPDF(渲染選項) 筆記 converter.PageSize = PageSize.A4 renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 紙張尺寸 converter.Orientation = PageOrientation.Landscape renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape 方向 Footer = "Page {page} of {totalPages}" TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}" } 頁腳(注意佔位符已更改) pdforge 中暫無新功能 IronPDF 功能 描述 PdfDocument.Merge() 合併多個PDF文件 pdf.ExtractAllText() 從PDF中提取文本 pdf.ApplyWatermark() 添加浮水印 pdf.SecuritySettings 密碼保護 pdf.Form 表格填寫 pdf.SignWithDigitalSignature() 數位簽名 程式碼遷移範例 範例 1:HTML 字串到 PDF 的轉換 之前(pdforge): // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); } } // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel (IronPDF 之後): // NuGet: Install-Package IronPdf using IronPdf; 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; 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 根本區別在於處理模型和返回類型。 pdforge 使用HtmlToPdfConverter的ConvertHtmlString()函數,該函數傳回一個byte[]陣列-然後您必須使用File.WriteAllBytes()函數儲存結果。 IronPDF 使用ChromePdfRenderer的RenderHtmlAsPdf()函數,該函數傳回一個PdfDocument物件。 可以使用SaveAs()直接儲存此對象,或者如果您需要原始字節,可以存取pdf.BinaryData 。 PdfDocument還允許在儲存之前進行操作(添加浮水印、與其他 PDF 合併、添加安全措施)。 請參閱HTML 轉 PDF 文件以取得完整範例。 範例 2:URL 轉 PDF 之前(pdforge): // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var pdf = converter.ConvertUrl("https://example.com"); File.WriteAllBytes("webpage.pdf", pdf); } } // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); var pdf = converter.ConvertUrl("https://example.com"); File.WriteAllBytes("webpage.pdf", pdf); } } $vbLabelText $csharpLabel (IronPDF 之後): // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://example.com"); pdf.SaveAs("webpage.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel pdforge 使用HtmlToPdfConverter類別的ConvertUrl() ,傳回使用File.WriteAllBytes()方法寫入的位元組。 IronPDF 在ChromePdfRenderer上使用RenderUrlAsPdf() ,傳回一個內建SaveAs()方法的PdfDocument 。 IronPDF 的主要優勢在於,它使用 Chromium 引擎在本地獲取和渲染 URL,而不會將任何資料發送到外部伺服器。 IronPDF 作為本機庫,由於無需像 Web 請求那樣進行往返,因此可能提供更好的效能。 了解更多關於URL轉PDF的資訊。 範例 3:使用自訂設定將 HTML 檔案轉換為 PDF 之前(pdforge): // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; var htmlContent = File.ReadAllText("input.html"); var pdf = converter.ConvertHtmlString(htmlContent); File.WriteAllBytes("output.pdf", pdf); } } // NuGet: Install-Package PdfForge using PdfForge; using System.IO; class Program { static void Main() { var converter = new HtmlToPdfConverter(); converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; var htmlContent = File.ReadAllText("input.html"); var pdf = converter.ConvertHtmlString(htmlContent); File.WriteAllBytes("output.pdf", pdf); } } $vbLabelText $csharpLabel (IronPDF 之後): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; var htmlContent = System.IO.File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; var htmlContent = System.IO.File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel 此範例展示了配置模式的差異。 pdforge 直接在轉換器物件上設定屬性( converter.PageSize = PageSize.A4 , converter.Orientation = PageOrientation.Landscape )。 IronPDF 使用具有強類型枚舉的RenderingOptions屬性: renderer.RenderingOptions.PaperSize = PdfPaperSize.A4和renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape 。 這提供了 IntelliSense 支援和編譯時類型安全性。 請注意,IronPDF 需要匯入IronPdf.Rendering命名空間才能取得紙張尺寸和方向枚舉。 請參閱教學課程以取得更多配置範例。 關鍵遷移說明 返回類型變更 pdforge 返回byte[] ; IronPDF 返回PdfDocument : // pdforge: Returns byte[] byte[] pdfBytes = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Returns PdfDocument var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Direct save byte[] bytes = pdf.BinaryData; // Get bytes if needed // pdforge: Returns byte[] byte[] pdfBytes = converter.ConvertHtmlString(html); File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Returns PdfDocument var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Direct save byte[] bytes = pdf.BinaryData; // Get bytes if needed $vbLabelText $csharpLabel 轉換器類別更改 // pdforge: HtmlToPdfConverter var converter = new HtmlToPdfConverter(); // IronPDF: ChromePdfRenderer var renderer = new ChromePdfRenderer(); // pdforge: HtmlToPdfConverter var converter = new HtmlToPdfConverter(); // IronPDF: ChromePdfRenderer var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 方法名稱變更 // pdforge methods converter.ConvertHtmlString(html) converter.ConvertUrl(url) // IronPDF methods renderer.RenderHtmlAsPdf(html) renderer.RenderUrlAsPdf(url) // pdforge methods converter.ConvertHtmlString(html) converter.ConvertUrl(url) // IronPDF methods renderer.RenderHtmlAsPdf(html) renderer.RenderUrlAsPdf(url) $vbLabelText $csharpLabel 儲存方法更改 // pdforge: Manual file write File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Built-in save method pdf.SaveAs("output.pdf"); // pdforge: Manual file write File.WriteAllBytes("output.pdf", pdfBytes); // IronPDF: Built-in save method pdf.SaveAs("output.pdf"); $vbLabelText $csharpLabel 配置位置更改 pdforge 使用轉換器的屬性; IronPDF 使用 RenderingOptions: // pdforge: Properties on converter converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; // IronPDF: Properties on RenderingOptions renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; // pdforge: Properties on converter converter.PageSize = PageSize.A4; converter.Orientation = PageOrientation.Landscape; // IronPDF: Properties on RenderingOptions renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape; $vbLabelText $csharpLabel 頁首/頁尾佔位符語法 如果在頁首或頁尾中使用頁碼,佔位符語法有所不同: // pdforge placeholders "Page {page} of {totalPages}" // IronPDF placeholders "Page {page} of {total-pages}" // Note: hyphen in total-pages // pdforge placeholders "Page {page} of {totalPages}" // IronPDF placeholders "Page {page} of {total-pages}" // Note: hyphen in total-pages $vbLabelText $csharpLabel 遷移後的新功能 遷移到 IronPDF 後,您將獲得 pdforge 無法提供的功能: PDF合併 var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel 文字擷取 var pdf = PdfDocument.FromFile("document.pdf"); string allText = pdf.ExtractAllText(); var pdf = PdfDocument.FromFile("document.pdf"); string allText = pdf.ExtractAllText(); $vbLabelText $csharpLabel 水印 pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); $vbLabelText $csharpLabel 密碼保護 pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; $vbLabelText $csharpLabel 功能對比總結 特徵 pdforge IronPDF HTML 轉 PDF ✓ ✓ PDF檔案的URL ✓ ✓ 頁面設定 ✓ ✓ 可離線使用 ✗ ✓ 本地處理 ✗ ✓ 合併PDF ✗ ✓ 拆分PDF ✗ ✓ 提取文字 ✗ ✓ 水印 ✗ ✓ 表格填寫 ✗ ✓ 數位簽名 ✗ ✓ 密碼保護 ✗ ✓ 無速率限制 ✗ ✓ 一次許可證 ✗ ✓ 遷移清單 遷移前 清點程式碼庫中所有 pdforge API 呼叫 記錄目前使用的設定選項(頁面大小、方向) 確定要更新的頁首/頁尾佔位符( {totalPages} → {total-pages} ) 規劃 IronPDF 許可證密鑰儲存(建議使用環境變數) 先使用 IronPDF 試用許可證進行測試 軟體包變更 刪除pdforge NuGet 套件 移除PdfForge NuGet 套件 安裝IronPdf NuGet 套件: dotnet add package IronPdf 程式碼更改 更新所有命名空間導入( using PdfForge; → using IronPdf; ) 增加using IronPdf.Rendering;用於紙張尺寸和方向枚舉 將HtmlToPdfConverter替換為ChromePdfRenderer 將ConvertHtmlString()替換為RenderHtmlAsPdf() 將ConvertUrl()替換為RenderUrlAsPdf() 將File.WriteAllBytes()替換為pdf.SaveAs() 將PageSize屬性移至RenderingOptions.PaperSize 將Orientation屬性移至RenderingOptions.PaperOrientation 更新枚舉名稱( PageSize.A4 → PdfPaperSize.A4 ) 更新枚舉名稱( PageOrientation.Landscape → PdfPaperOrientation.Landscape ) 更新頁首/頁尾中的佔位符語法 移民後 測試 PDF 輸出品質符合預期 驗證離線操作是否正常 從設定中移除 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 PdfPig to IronPDF in C#How to Migrate from PdfiumViewer to...
發表日期 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. 閱讀更多