MIGRATION GUIDES How to Migrate from PDFreactor to IronPDF in C# Curtis Chau 發表日期:2026年2月1日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 從 PDF反應器 遷移到 IronPDF 可以消除 Java 依賴項和伺服器基礎設施,同時透過原生 .NET 程式庫提供等效的 HTML 到 PDF 轉換功能。 本指南提供了一個完整的、逐步的遷移路徑,將您的基於 Java 的伺服器架構替換為可無縫整合到 .NET 應用程式中的進程內程式庫。 為什麼要從 PDF反應器 遷移到 IronPDF 了解 PDFreactor PDFreactor 是一個功能強大的 HTML 轉 PDF 轉換伺服器,可跨多個平台整合。 作為商業解決方案,PDFreactor 利用其專有技術將 HTML 和 CSS 內容轉換為高品質的 PDF 文件。 PDF反應器 的顯著特點之一是支援多種 CSS 屬性,這使其成為複雜佈局渲染的理想選擇。 然而,PDFreactor 對 Java 的依賴在 .NET 環境中帶來了一些挑戰,其非原生特性可能會使部署和整合變得複雜。 它對 Java 的依賴會為 .NET 應用程式帶來額外的開銷,通常需要額外的整合工作。 Java依賴問題 PDFreactor 的架構在 .NET 環境中會帶來一些挑戰: 1.需要 Java 執行環境:需要在所有伺服器上安裝 JRE/JDK。 2.伺服器架構:作為獨立服務運行,需要額外的基礎設施。 作為基於伺服器的解決方案,PDFreactor 每次轉換都需要呼叫 REST API。 3.複雜的部署:在以 .NET 為主的生態系統中管理 Java 依賴項可能會使設定複雜化並增加維護成本。 CI/CD 管道中需要管理兩個執行時間環境(Java + .NET)。 4.進程間通訊: REST API 或套接字通訊會增加延遲。 每次 PDF 轉換都需要與伺服器進行 HTTP 往返通訊。 5.獨立許可證管理:許可證綁定到伺服器實例,而不是應用程式。 按伺服器授權,與 Java 服務實例綁定。 6.資源隔離:分離進程記憶體和 CPU 管理。 用於監控、擴展和維護的額外伺服器。 PDF反應器 與 IronPDF 的比較 特徵/方面 PDF反應器 IronPDF 原生 .NET 函式庫 否(基於 Java 的) 是的 運行時 Java(外部伺服器) 原生 .NET(進程內) 建築學 REST API 服務 NuGet 函式庫 部署 Java + 伺服器配置 單一 NuGet 套件 依賴關係 JRE + HTTP 用戶端 自給自足 延遲 網路往返 直接方法調用 跨平台能力 是的(依賴Java) 是的(捆綁式鉻) CSS 支援 對 CSS3 和 CSS 分頁媒體的高級支持 全面支援 HTML5/CSS3 部署複雜性 由於 Java 的原因,情況變得更加複雜。 簡單易用,可直接與 .NET 集成 PDF 處理功能 基本(僅限生成) 功能強大,包括合併、拆分、編輯和註釋。 與 PDF反應器 不同,IronPDF 是一個原生 .NET 程式庫,專門設計用於無縫整合到 .NET 專案中,而無需 Java 等外部依賴項。 IronPDF 使用捆綁的 Chromium 渲染引擎,只需幾行程式碼即可將 HTML 轉換為 PDF。 對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊,IronPDF 提供了一個原生的 .NET 解決方案,消除了 Java 伺服器的複雜性,同時提供了全面的 PDF 生命週期管理。 開始之前 先決條件 .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 存取權限:能夠安裝 NuGet 套件 IronPDF 許可證:請從ironpdf.com取得您的許可證密鑰。 NuGet 套件變更 # Remove PDF反應器 NuGet packages dotnet remove package PDFreactor.NET dotnet remove package PDFreactor.Native.Windows.x64 # Stop PDF反應器 server service (if running locally) # Windows: net stop PDFreactor # Linux: sudo systemctl stop pdfreactor # Install IronPDF dotnet add package IronPdf # Remove PDF反應器 NuGet packages dotnet remove package PDFreactor.NET dotnet remove package PDFreactor.Native.Windows.x64 # Stop PDF反應器 server service (if running locally) # Windows: net stop PDFreactor # Linux: sudo systemctl stop pdfreactor # Install IronPDF dotnet add package IronPdf SHELL 許可證配置 PDFreactor(伺服器端): // License configured on server via config file or command line // Client connects to licensed server var pdfReactor = new PDFreactor("http://pdfreactor-server:9423"); // License configured on server via config file or command line // Client connects to licensed server var pdfReactor = new PDFreactor("http://pdfreactor-server:9423"); $vbLabelText $csharpLabel IronPDF(應用層): // One-time setup at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; // One-time setup at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; $vbLabelText $csharpLabel 確定 PDF反應器 的使用情況 # Find PDF反應器 usage grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" . # Find CSS 分頁媒體 rules to convert grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" . # Find PDF反應器 usage grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" . # Find CSS 分頁媒體 rules to convert grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" . SHELL 完整 API 參考 命名空間變更 // Before: PDFreactor using RealObjects.PDFreactor; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; // Before: PDFreactor using RealObjects.PDFreactor; using System.IO; // After: IronPDF using IronPdf; using IronPdf.Rendering; $vbLabelText $csharpLabel 核心類別映射 PDF反應器 IronPDF 筆記 PDFreactor ChromePdfRenderer 主轉換類 Configuration ChromePdfRenderOptions PDF 設定 Result PdfDocument 輸出文件 config.Document = html renderer.RenderHtmlAsPdf(html) HTML 輸入 result.Document (byte[]) pdf.BinaryData 原始位元組 配置屬性映射 PDF反應器 配置 IronPDF渲染選項 筆記 config.Document = html renderer.RenderHtmlAsPdf(html) HTML 內容 config.Document = url renderer.RenderUrlAsPdf(url) URL轉換 config.PageFormat = PageFormat.A4 RenderingOptions.PaperSize = PdfPaperSize.A4 紙張尺寸 config.PageOrientation RenderingOptions.PaperOrientation 方向 config.PageMargins RenderingOptions.MarginTop/Bottom/Left/Right 頁邊距(毫米) config.EnableJavaScript = true RenderingOptions.EnableJavaScript = true JS執行 config.AddUserStyleSheet(css) 在 HTML 中嵌入 CSS CSS注入 config.Title pdf.MetaData.Title 元數據 config.Encryption pdf.SecuritySettings 安全 PDF反應器 中尚未提供新功能 IronPDF 功能 描述 PdfDocument.Merge() 合併多個PDF文件 pdf.ApplyWatermark() 添加浮水印 pdf.ExtractAllText() 文字擷取 pdf.Form 表格填寫 pdf.Sign() 數位簽名 程式碼遷移範例 範例 1:HTML 字串到 PDF 的轉換 之前(PDFreactor): // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDF反應器 pdfReactor = new PDFreactor(); string html = "<html><body><h1>Hello World</h1></body></html>"; Configuration config = new Configuration(); config.Document = html; Result result = pdfReactor.Convert(config); File.WriteAllBytes("output.pdf", result.Document); } } // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDF反應器 pdfReactor = new PDFreactor(); string html = "<html><body><h1>Hello World</h1></body></html>"; Configuration config = new Configuration(); config.Document = html; Result result = pdfReactor.Convert(config); File.WriteAllBytes("output.pdf", result.Document); } } $vbLabelText $csharpLabel (IronPDF 之後): // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string 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; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string html = "<html><body><h1>Hello World</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } $vbLabelText $csharpLabel 根本差別在於建築模式。 PDF反應器 需要建立一個PDFreactor實例(連接到 Java 伺服器),一個單獨的Configuration物件來保存設定和 HTML 內容,呼叫Convert()函數傳回一個Result對象,最後使用File.WriteAllBytes()將result.Document位元組寫入檔案。 IronPDF 將此程序簡化為建立一個ChromePdfRenderer ,直接使用 HTML 字串呼叫RenderHtmlAsPdf() ,然後對傳回的PdfDocument使用內建的SaveAs()方法。 無需伺服器連接,無需配置對象,無需手動位元組處理。 請參閱HTML 轉 PDF 文件以取得完整範例。 範例 2:URL 轉 PDF 之前(PDFreactor): // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDF反應器 pdfReactor = new PDFreactor(); Configuration config = new Configuration(); config.Document = "https://www.example.com"; Result result = pdfReactor.Convert(config); File.WriteAllBytes("webpage.pdf", result.Document); } } // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDF反應器 pdfReactor = new PDFreactor(); Configuration config = new Configuration(); config.Document = "https://www.example.com"; Result result = pdfReactor.Convert(config); File.WriteAllBytes("webpage.pdf", result.Document); } } $vbLabelText $csharpLabel (IronPDF 之後): // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); } } $vbLabelText $csharpLabel PDFreactor 對 HTML 字串和 URL 使用相同的config.Document屬性,自動決定類型。 IronPDF 提供了明確方法: RenderHtmlAsPdf()用於 HTML 字串, RenderUrlAsPdf()用於 URL。 這種明確的方法提高了程式碼的清晰度和對 IntelliSense 的支援。 了解更多信息,請閱讀我們的教程。 範例 3:帶頁碼的頁首和頁尾 之前(PDFreactor): // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDF反應器 pdfReactor = new PDFreactor(); string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; Configuration config = new Configuration(); config.Document = html; config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }"); Result result = pdfReactor.Convert(config); File.WriteAllBytes("document.pdf", result.Document); } } // NuGet: Install-Package PDFreactor.Native.Windows.x64 using RealObjects.PDFreactor; using System.IO; class Program { static void Main() { PDF反應器 pdfReactor = new PDFreactor(); string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; Configuration config = new Configuration(); config.Document = html; config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }"); Result result = pdfReactor.Convert(config); File.WriteAllBytes("document.pdf", result.Document); } } $vbLabelText $csharpLabel (IronPDF 之後): // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Header Text" }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { CenterText = "Page {page}" }; string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("document.pdf"); } } // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Rendering; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Header Text" }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { CenterText = "Page {page}" }; string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("document.pdf"); } } $vbLabelText $csharpLabel 這個例子展示了最顯著的語法差異。 PDF反應器 使用 CSS 分頁媒體語法和@page規則、 @top-center / @bottom-center區域以及透過AddUserStyleSheet()注入的頁碼的counter(page) 。 IronPDF 使用原生 .NET API,將TextHeaderFooter物件指派給RenderingOptions.TextHeader和RenderingOptions.TextFooter 。 頁碼使用{page}佔位符而不是 CSS counter(page) 。 請注意,IronPDF 也要求匯入IronPdf.Rendering命名空間以用於頁首/頁尾類別。 關鍵遷移說明 無需伺服器 IronPDF以進程內方式運作-無需配置Java伺服器: // PDFreactor: Requires server connection var pdfReactor = new PDFreactor("http://localhost:9423"); // IronPDF: No server URL needed var renderer = new ChromePdfRenderer(); // PDFreactor: Requires server connection var pdfReactor = new PDFreactor("http://localhost:9423"); // IronPDF: No server URL needed var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel CSS 分頁媒體到 IronPDF API 將 CSS @page規則替換為 RenderingOptions: // PDF反應器 CSS: @page { @bottom-center { content: 'Page ' counter(page); } } // IronPDF equivalent: renderer.RenderingOptions.TextFooter = new TextHeaderFooter { CenterText = "Page {page}" }; // PDF反應器 CSS: @page { @bottom-center { content: 'Page ' counter(page); } } // IronPDF equivalent: renderer.RenderingOptions.TextFooter = new TextHeaderFooter { CenterText = "Page {page}" }; $vbLabelText $csharpLabel 頁碼佔位符語法 // PDF反應器 CSS: counter(page) // IronPDF: {page} // PDF反應器 CSS: counter(pages) // IronPDF: {total-pages} // PDF反應器 CSS: counter(page) // IronPDF: {page} // PDF反應器 CSS: counter(pages) // IronPDF: {total-pages} $vbLabelText $csharpLabel 結果處理變更 配置 + 結果模式變成直接 PdfDocument: // PDFreactor: Configuration → Convert → Result → bytes Result result = pdfReactor.Convert(config); byte[] bytes = result.Document; File.WriteAllBytes("output.pdf", bytes); // IronPDF: Direct PdfDocument with built-in methods var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or: byte[] bytes = pdf.BinaryData; // PDFreactor: Configuration → Convert → Result → bytes Result result = pdfReactor.Convert(config); byte[] bytes = result.Document; File.WriteAllBytes("output.pdf", bytes); // IronPDF: Direct PdfDocument with built-in methods var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); // Or: byte[] bytes = pdf.BinaryData; $vbLabelText $csharpLabel 利潤單位變化 PDFreactor 使用字串; IronPDF 使用毫米: // PDFreactor: config.PageMargins.Top = "1in" // IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm // PDFreactor: config.PageMargins.Top = "1in" // IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm $vbLabelText $csharpLabel 遷移後的新功能 遷移到 IronPDF 後,您將獲得 PDF反應器 無法提供的功能: 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 水印 pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>"); $vbLabelText $csharpLabel 文字擷取 string text = pdf.ExtractAllText(); string text = pdf.ExtractAllText(); $vbLabelText $csharpLabel 密碼保護 pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; pdf.SecuritySettings.UserPassword = "userpassword"; pdf.SecuritySettings.OwnerPassword = "ownerpassword"; $vbLabelText $csharpLabel 功能對比總結 特徵 PDF反應器 IronPDF HTML 轉 PDF ✓ ✓ PDF檔案的URL ✓ ✓ 頁首/頁尾 CSS 分頁媒體 原生 API 頁面設定 ✓ ✓ JavaScript 支援 ✓ ✓ Native .NET ✗ ✓ 進行中 ✗ ✓ 合併PDF ✗ ✓ 拆分PDF ✗ ✓ 水印 ✗ ✓ 文字擷取 ✗ ✓ 表格填寫 ✗ ✓ 數位簽名 ✗ ✓ 遷移清單 遷移前 清點程式碼庫中所有 PDF反應器 的使用情況 記錄所有使用的 CSS 分頁媒體規則 注意所有組態設定(邊距、頁面大小、JavaScript) 規劃 IronPDF 許可證密鑰儲存(建議使用環境變數) 先使用 IronPDF 試用許可證進行測試 軟體包變更 刪除PDFreactor.NET NuGet 套件 刪除PDFreactor.Native.Windows.x64 NuGet 套件 安裝IronPdf NuGet 套件: dotnet add package IronPdf 程式碼更改 更新命名空間導入( using RealObjects.PDFreactor; → using IronPdf; ) 新增using IronPdf.Rendering;用於頁首/頁尾類 將PDFreactor類別替換為ChromePdfRenderer 將Configuration物件轉換為RenderingOptions屬性 將config.Document = html替換為renderer.RenderHtmlAsPdf(html) 將config.Document = url替換為renderer.RenderUrlAsPdf(url) 將File.WriteAllBytes(path, result.Document)替換為pdf.SaveAs(path) 將 CSS @page規則轉換為TextHeader / TextFooter對象 更新頁碼佔位符( counter(page) → {page} ) 將邊距單位從字串轉換為毫米 基礎設施遷移 移除 Java 執行時間要求 停用 PDF反應器 伺服器 更新 Docker/部署配置 更新 CI/CD 管線 移民後 測試 PDF 輸出品質符合預期 驗證頁首/頁尾渲染效果 如果使用,請驗證 JavaScript 的執行情況 根據需要新增功能(合併、浮水印、安全)。 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 PDFSharp to IronPDF in C#How to Migrate from PDFPrinting.NET...
發表日期 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. 閱讀更多