跳過到頁腳內容
遷移指南

如何在 C# 中從 Easy PDF SDK 轉移到 IronPDF

從Easy PDF SDK移轉至 IronPDF:完整的 C# 遷移指南。

BCLEasy PDF SDK一直是 Windows 環境下 PDF 生成的傳統解決方案,它利用虛擬印表機驅動程式和 Microsoft Office 自動化。 .NET、Java、Python 或 Node.js 是目前最流行的應用程式,但其僅限 Windows 的架構、COM 互操作的依賴性,以及互動式使用者會話的需求,為現代應用程式的部署帶來根本性的挑戰。 本綜合指南提供了從Easy PDF SDK逐步遷移到IronPDF的路徑 -IronPDFfor .NET 是一個原生的 .NET PDF 函式庫,具有跨平台支援、基於 Chromium 的渲染和容器化部署功能。

為何捨棄 Easy PDF SDK? Easy PDF SDK 依賴數種傳統技術,在現代開發環境中造成重大的部署與維護挑戰。 ### 常見的Easy PDF SDK部署問題 開發人員在使用Easy PDF SDK時經常會遇到這些問題: - `bcl.easypdf.interop.easypdfprinter.dll 錯誤載入`。 - `無法使用已從底層 RCW 分離出來的 COM 物件` - `等待列印工作完成的逾時時間已過` - `印表機作業失敗,因為服務未執行` - `錯誤:拒絕存取` (需要互動會話) - `找不到印表機:BCL easyPDF 印表機`。 這些錯誤源自Easy PDF SDK的基本架構 - 它需要虛擬印表機驅動程式、COM 互操作和互動式 Windows 會話,而這些在現代伺服器環境中根本不存在。 ###Easy PDF SDKvs. IronPDF:主要差異 |特點|Easy PDF SDK|IronPDF| |---------|-----------------|---------| |**平台**|僅限 Windows| Windows、Linux、macOS、Docker | |**依賴辦公室**|要求|無| |**安裝**|複雜的 MSI + 印表機驅動程式 + COM|簡單的 NuGet 套件| |**伺服器支援**|需要互動會議|無頭運行| |**HTML 渲染**|基礎 (辦公室用)|完整的 Chromium (CSS3、JS)| |**.NET支援**|有限的 .NET Core|完整的 .NET 5/6/7/8/9| |**同步模式**|基於回呼|原生 async/await| |**容器支援**|無法執行|完整的 Docker/Kubernetes| ### 平台限制 Easy PDF SDK 完全依賴 Windows 系統,需要安裝 Microsoft Office 進行轉換,因此不支援 Linux、macOS 或 Docker 等容器化環境。 在 Windows 環境中,伺服器會依賴 Windows 作業系統,這種依賴使得伺服器設定變得麻煩,並限制了 Windows 環境的服務採用 - 這對於實行多平台 DevOps 或使用容器進行部署的團隊而言,是一大限制。 ## 遷移前的準備工作 ### 先決條件 確保您的環境符合這些要求: - .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9 - Visual Studio 2019+ 或具有 C# 擴充功能的 VS Code - NuGet 套件管理員存取權限 -IronPDF授權金鑰 (可於 [ironpdf.com](https://ironpdf.com/licensing/) 網站免費試用) ### 審計易 PDF SDK 使用方法 在您的解決方案目錄中執行這些指令,以識別所有Easy PDF SDK參考資料: ```bash # Find all BCL using statements grep -r "using BCL" --include="*.cs" . # Find Printer/PDFDocument usage grep -r "Printer\|PDFDocument\|PDFConverter\|HTMLConverter" --include="*.cs" . # Find COM interop references grep -r "easyPDF\|BCL.easyPDF" --include="*.csproj" . # Find configuration settings grep -r "PageOrientation\|TimeOut\|PrintOffice" --include="*.cs" . ``` ### 可預期的重大變更 |Easy PDF SDK 模式|變更要求| |---------------------|-----------------| |`new 印表機()`。|使用 `ChromePdfRenderer`| |<代碼>PrintOfficeDocToPDF()RenderHTMLToPDF()RenderHtmlAsPdf()ChromePdfRendererPDF 文件PDF 文件HTMLConverterChromePdfRendererPdfPaperOrientationPdfPaperSizeSecurityHandlerpdf.CopyPages(start, end)doc.GetPageCount()pdf.PageCountdoc.Save(路徑)pdf.SaveAs(路徑)doc.Close()doc.ExtractText()pdf.ExtractAllText()config.TimeOutRenderingOptions.TimeoutHello World", pdf); pdf.Save("output.pdf"); pdf.Close(); } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Hello World

"); pdf.SaveAs("output.pdf"); } } ``` IronPdf 消除了單獨的<編碼>HTMLConverter{ PdfDocument.FromFile("document1.pdf"), PdfDocument.FromFile("document2.pdf") }; var merged = PdfDocument.Merge(pdfs); merged.SaveAs("merged.pdf"); } } ``` IronPdf 的靜態 `Merge` 方法可直接接受多個文件,省去了手動 `Append` 的循環模式。 ### 密碼保護 **IronPDF 實作:** ```csharp using IronPdf; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Confidential

"); // Set security pdf.SecuritySettings.UserPassword = "user123"; pdf.SecuritySettings.OwnerPassword = "owner456"; pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs("protected.pdf"); ``` ### 頁首和頁尾 Easy PDF SDK 不支援原生的頁首/頁尾 - 頁首與頁尾必須包含在原始 HTML 中。 IronPdf 提供專用功能: ```csharp using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @"
Company Name - Confidential
", DrawDividerLine = true, MaxHeight = 30 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @"
Page {page} of {total-pages}
", DrawDividerLine = true, MaxHeight = 25 }; var pdf = renderer.RenderHtmlAsPdf("

Content

"); pdf.SaveAs("with_headers.pdf"); ``` 如需更多選項,請參閱 [headers and footers 文件](https://ironpdf.com/how-to/headers-and-footers/)。 ### 異步 PDF 生成 Easy PDF SDK 使用基於 callback 的 async 模式。 IronPdf 支援原生 async/await: **輕鬆實現 PDF SDK:** ```csharp using BCL.easyPDF; Printer printer = new Printer(); // BCL uses callback-based async printer.BeginPrintToFile( "https://example.com", "output.pdf", OnPrintComplete, OnPrintError ); Console.ReadLine(); printer.Dispose(); ``` **IronPDF 實作:** ```csharp using IronPdf; using System.Threading.Tasks; class Program { static async Task Main() { var renderer = new ChromePdfRenderer(); // Native async/await var pdf = await renderer.RenderUrlAsPdfAsync("https://example.com"); await pdf.SaveAsAsync("output.pdf"); Console.WriteLine("PDF created: output.pdf"); } } ``` ## 關鍵遷移注意事項 ### 頁面索引變更 Easy PDF SDK 使用基於 1 的索引。 IronPdf 使用基於 0 的索引: ```csharp // Easy PDF SDK: 1-based doc.ExtractPages(1, 5); // IronPDF: 0-based pdf.CopyPages(0, 4); ``` ### 以毫秒為單位的逾時時間 Easy PDF SDK 使用秒作為逾時值。 IronPdf 使用毫秒: ```csharp // Easy PDF SDK: seconds config.TimeOut = 120; // IronPDF: milliseconds renderer.RenderingOptions.Timeout = 120000; ``` ## ASP.NET Core 整合。 由於互動會話的需求,Easy PDF SDK 在網路環境中舉步維艱。 **IronPDF模式:** ```csharp [ApiController] [Route("[controller]")] public class PdfController : ControllerBase { [HttpGet("generate")] public IActionResult GeneratePdf() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Report

"); return File(pdf.BinaryData, "application/pdf", "report.pdf"); } [HttpGet("generate-async")] public async TaskGeneratePdfAsync() { var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync("

Report

"); return File(pdf.Stream, "application/pdf", "report.pdf"); } } ``` ## Docker 部署 Easy PDF SDK 不能在 Docker 容器中執行 - 它需要 Windows 容器、Microsoft Office、虛擬印表機驅動程式和互動式桌面會話。 這與容器化根本不相容。 **IronPDF Docker 配置:** ```dockerfile FROM mcr.microsoft.com/dotnet/aspnet:8.0 # Install Chromium dependencies RUN apt-get update && apt-get install -y \ libc6 libgdiplus libx11-6 libxcomposite1 \ libxdamage1 libxrandr2 libxss1 libxtst6 \ libnss3 libatk-bridge2.0-0 libgtk-3-0 \ libgbm1 libasound2 fonts-liberation \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "MyApp.dll"] ``` ## 排除常見的遷移問題 ### 問題:未找到印表機 **症狀:** `無法找到印表機:BCL easyPDF 印表機`。 **解決方案:**IronPDF不需要印表機驅動程式: ```csharp // Just use the renderer directly var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); ``` ### 問題:COM 互操作錯誤 **症狀:** `DLL 錯誤載入`或 `RCW` 錯誤 **解決方案:**移除所有 COM 參照,並使用IronPDF的管理式 API。 ### 問題:伺服器超時 **症狀:**PDF 生成在 Web 伺服器上擱置 **解決方案:**IronPDF在無交互會話的情況下無頭執行: ```csharp var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.Timeout = 60000; // Reliable timeout var pdf = renderer.RenderHtmlAsPdf(html); ``` ### 問題:背景無法列印 **症狀:**CSS 背景遺失 **解決方案:**啟用背景列印: ```csharp renderer.RenderingOptions.PrintHtmlBackgrounds = true; ``` ## 遷移後檢查清單 完成程式碼遷移後,請驗證下列事項: - [ ] 使用IronPDF的 Chromium 引擎驗證 PDF 輸出品質 - [ ] 測試複雜 HTML/CSS 的所有邊緣情況 - [ ] 在沒有互動會議的情況下驗證伺服器的部署是否有效 - [測試 Docker/容器部署 - [ ] 從部署中移除 BCL EasyPDF 安裝程式 - [ ] 從伺服器移除 Office 安裝(不再需要) - [ ] 使用新的 NuGet 套件更新 CI/CD 管道 ## Future-Proofing Your PDF Infrastructure 由於 .NET 10 即將推出,而 C# 14 也將引進新的語言功能,因此選擇跨平台的 PDF 函式庫可確保與不斷演進的部署模式相容。IronPDF支援 Linux、Docker 和雲原生架構,這意味著當專案延伸至 2025 和 2026 年時,您的遷移投資將獲得回報 - 而不會受到Easy PDF SDK僅限 Windows 的限制。 ## 其他資源 - [IronPDF文件](https://ironpdf.com/docs/)。 - [HTML to PDF Tutorials](https://ironpdf.com/tutorials/) - [API Reference](https://ironpdf.com/object-reference/api/) - [NuGet 套件](https://www.nuget.org/packages/IronPdf/)。 - [授權選項](https://ironpdf.com/licensing/) --- 從Easy PDF SDK轉換到 IronPDF,可以消除虛擬印表機依賴性、COM 互操作問題以及僅限 Windows 的限制。 轉換到基於 Chromium 的渲染提供了優異的 CSS3 和 JavaScript 支援,同時可部署到 Docker、Kubernetes 和雲端環境,這在Easy PDF SDK的傳統架構中是不可能實現的。
Curtis Chau
技術作家

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

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