跳過到頁腳內容
遷移指南

如何從 Adobe PDF Library SDK 轉移到 IronPDF

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

Adobe PDF Library SDK 透過 Datalogics 分銷,提供具有企業級功能的正版 Adobe PDF 引擎。 然而,高昂的 License 成本、複雜的原生 SDK 整合以及低階 API 設計,讓大多數開發團隊無法實現。 本綜合指南提供了從Adobe PDF Library SDK逐步遷移到IronPDF的路徑 -IronPDF是一個現代化、具成本效益的 .NET PDF library,支援 .NET Framework 4.6.2 到 .NET 9 以及未來的版本。

為何要遷離 Adobe PDF Library SDK? 雖然Adobe PDF Library SDK提供正宗的 Adobe PDF 引擎,但有幾個因素驅使開發團隊尋求替代方案,以滿足他們的 PDF 生成和處理需求。 ### 高昂的授權成本 Adobe PDF Library SDK 採用企業級定價,每年的價格通常從 10,000 美元到 50,000 美元以上不等。 這種成本結構使得 SDK 對於中小型企業、新創企業、個人開發者,以及不需要全面 Adobe 引擎功能的專案來說並不可行。 ### 複雜的原生 SDK 整合 Adobe PDF Library SDK 建立在需要特定平台二進位檔的原生 C++ 程式碼上。 開發人員必須仔細管理記憶體、處理明確的初始化和終止模式,以及瀏覽複雜的設定程序。 這會增加大量的開發開銷,並使 CI/CD 管道變得複雜。 ### 低階 API 設計 使用Adobe PDF Library SDK創建 PDF 需要以程式化的方式建構頁面、內容流、文字運行和字型。 簡單的工作,例如渲染 HTML 內容,會變成涉及座標計算、字型嵌入和手動內容元素管理的多步操作。 ### Library Lifecycle Management Overhead 每個操作都需要在<編碼>Library.Initialize()Library.Terminate()ChromePdfRendererLibrary.Initialize()Library.Terminate()pdf.SaveAs(路徑)doc.NumPagespdf.PageCountpdf.Pages[index]PdfDocument.Merge()`, `

` 等。|HTML 標籤| |`text.AddRun(textRun)`。|使用 HTML|透過 HTML 的文字| |`new TextRun(文字、字型、大小、點)`。|CSS 造型|透過 CSS 設計風格| |`new Font(name, flags)`|CSS `font-family`|透過 CSS 的字型| |`new Image(path)` 新圖像(路徑)|HTML ` related to 從Adobe PDF Library SDK移轉至 IronPDF:完整的 C# 遷移指南。` 標籤|圖片透過 HTML| |`content.AddElement(...)`。|HTML 內容|使用 HTML 建立| |<編碼>page.UpdateContent()pdf.SecuritySettingspdf.ExtractAllText()wordFinder.GetWordList()pdf.Pages[i].Text

Hello World

"; // Convert HTML to PDF Document doc = Document.CreateFromHTML(htmlContent, htmlParams); doc.Save(SaveFlags.Full, "output.pdf"); doc.Dispose(); } } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class IronPdfHtmlToPdf { static void Main() { var renderer = new ChromePdfRenderer(); string htmlContent = "

Hello World

"; // Convert HTML to PDF with simple API var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); } } ``` IronPDF 消除了函式庫生命週期包裝程式、轉換參數物件以及明確的處置。 `ChromePdfRenderer`使用基於 Chromium 的引擎來提供像素完美的 CSS 和 JavaScript 支援。 如需進階方案,請參閱 [HTML to PDF 文件](https://ironpdf.com/how-to/html-file-to-pdf/)。 ### 合併多個 PDF 文件 PDF 合併可清楚展示 API 複雜性的差異。 **Adobe PDF Library SDK 實作:** ```csharp // Adobe PDF Library SDK using Datalogics.PDFL; using System; class AdobeMergePdfs { static void Main() { using (Library lib = new Library()) { // Open first PDF document Document doc1 = new Document("document1.pdf"); Document doc2 = new Document("document2.pdf"); // Insert pages from second document into first PageInsertParams insertParams = new PageInsertParams(); insertParams.InsertFlags = PageInsertFlags.None; for (int i = 0; i < doc2.NumPages; i++) { Page page = doc2.GetPage(i); doc1.InsertPage(doc1.NumPages - 1, page, insertParams); } doc1.Save(SaveFlags.Full, "merged.pdf"); doc1.Dispose(); doc2.Dispose(); } } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class IronPdfMergePdfs { static void Main() { // Load PDF documents var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); // Merge PDFs with simple method var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); } } ``` Adobe 的方法需要逐頁迭代插入參數。IronPDF提供單一 `Merge` 方法,可接受多個文件。 ### 新增水印 水印說明IronPDF如何利用 HTML/CSS 來實現造型的靈活性。 **Adobe PDF Library SDK 實作:** ```csharp // Adobe PDF Library SDK using Datalogics.PDFL; using System; class AdobeAddWatermark { static void Main() { using (Library lib = new Library()) { Document doc = new Document("input.pdf"); // Create watermark with complex API WatermarkParams watermarkParams = new WatermarkParams(); watermarkParams.Opacity = 0.5; watermarkParams.Rotation = 45.0; watermarkParams.VerticalAlignment = WatermarkVerticalAlignment.Center; watermarkParams.HorizontalAlignment = WatermarkHorizontalAlignment.Center; WatermarkTextParams textParams = new WatermarkTextParams(); textParams.Text = "CONFIDENTIAL"; Watermark watermark = new Watermark(doc, textParams, watermarkParams); doc.Save(SaveFlags.Full, "watermarked.pdf"); doc.Dispose(); } } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using IronPdf.Editing; using System; class IronPdfAddWatermark { static void Main() { var pdf = PdfDocument.FromFile("input.pdf"); // Apply text watermark with simple API pdf.ApplyWatermark("

CONFIDENTIAL

", rotation: 45, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center); pdf.SaveAs("watermarked.pdf"); } } ``` IronPdf 基於 HTML 的水印可透過 CSS 設定風格提供完整的設計控制,無需使用獨立的參數物件。 ### 密碼保護與加密 **Adobe PDF Library SDK 實作:** ```csharp using Datalogics.PDFL; public void ProtectPdf(string inputPath, string outputPath, string password) { Library.Initialize(); try { using (Document doc = new Document(inputPath)) { PermissionFlags permissions = PermissionFlags.PrintDoc | PermissionFlags.PrintFidelity; EncryptionHandler encHandler = new EncryptionHandler( password, // User password password, // Owner password permissions, EncryptionMethod.AES256); doc.SetEncryptionHandler(encHandler); doc.Save(SaveFlags.Full | SaveFlags.Encrypted, outputPath); } } finally { Library.Terminate(); } } ``` **IronPDF 實作:** ```csharp using IronPdf; public void ProtectPdf(string inputPath, string outputPath, string password) { using var pdf = PdfDocument.FromFile(inputPath); pdf.SecuritySettings.UserPassword = password; pdf.SecuritySettings.OwnerPassword = password; pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs(outputPath); } ``` IronPdf 使用強式類型的屬性來取代位元權限旗標和加密處理物件。 ### 文字萃取 **Adobe PDF Library SDK 實作:** ```csharp using Datalogics.PDFL; public string ExtractText(string pdfPath) { string extractedText = ""; Library.Initialize(); try { using (Document doc = new Document(pdfPath)) { WordFinderConfig config = new WordFinderConfig(); config.IgnoreCharGaps = true; for (int i = 0; i < doc.NumPages; i++) { using (WordFinder wordFinder = new WordFinder(doc, i, config)) { IList words = wordFinder.GetWordList(); foreach (Word word in words) { extractedText += word.Text + " "; } extractedText += "\n"; } } } } finally { Library.Terminate(); } return extractedText; } ``` **IronPDF 實作:** ```csharp using IronPdf; public string ExtractText(string pdfPath) { using var pdf = PdfDocument.FromFile(pdfPath); return pdf.ExtractAllText(); } ``` Adobe 的逐字迭代在IronPDF中變成了單一的方法呼叫。 ### 頁首和頁尾 **Adobe PDF Library SDK 實作:** ```csharp using Datalogics.PDFL; public void AddHeaderFooter(string inputPath, string outputPath) { Library.Initialize(); try { using (Document doc = new Document(inputPath)) { Font font = new Font("Helvetica", FontCreateFlags.None); for (int i = 0; i < doc.NumPages; i++) { using (Page page = doc.GetPage(i)) { Content content = page.Content; // Add header Text header = new Text(); header.AddRun(new TextRun("Document Header", font, 10, new Point(72, page.MediaBox.Top - 36))); content.AddElement(header); // Add footer with page number Text footer = new Text(); footer.AddRun(new TextRun($"Page {i + 1} of {doc.NumPages}", font, 10, new Point(72, 36))); content.AddElement(footer); page.UpdateContent(); } } doc.Save(SaveFlags.Full, outputPath); } } finally { Library.Terminate(); } } ``` **IronPDF 實作:** ```csharp using IronPdf; public void CreatePdfWithHeaderFooter(string html, string outputPath) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Document Header", FontSize = 10, FontFamily = "Helvetica" }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}", FontSize = 10, FontFamily = "Helvetica" }; using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(outputPath); } ``` IronPdf 可自動處理頁面迭代,並支援 `{page}` 和 `{total-pages}` 等占位符記號。 如需更進階的版面設計,請參閱 [headers and footers 文件](https://ironpdf.com/how-to/headers-and-footers/)。 ### URL 轉 PDF Adobe PDF Library SDK 缺乏內建的 URL 渲染功能。 IronPdf 提供本機支援: ```csharp using IronPdf; public void ConvertUrlToPdf(string url, string outputPath) { var renderer = new ChromePdfRenderer(); using var pdf = renderer.RenderUrlAsPdf(url); pdf.SaveAs(outputPath); } ``` 如需完整的 URL 轉換選項,請參閱 [URL to PDF 文件](https://ironpdf.com/how-to/url-to-pdf/)。 ## ASP.NET Core 整合。 Adobe PDF Library SDK 的靜態初始化模式與依賴注入產生摩擦。IronPDF可與現代 .NET 架構自然整合。 **Adobe 模式 (DI 有問題):** ```csharp public class AdobePdfService { public byte[] Generate(string content) { Library.Initialize(); try { //複雜的文件construction... return bytes; } finally { Library.Terminate(); } } } ``` **IronPDF 模式(DI-友好):** ```csharp public interface IPdfService { Task GeneratePdfAsync(string html); } public class IronPdfService : IPdfService { private readonly ChromePdfRenderer _renderer; public IronPdfService() { _renderer = new ChromePdfRenderer(); _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; } public async Task GeneratePdfAsync(string html) { using var pdf = await _renderer.RenderHtmlAsPdfAsync(html); return pdf.BinaryData; } } // Register in Program.cs (.NET 6+): builder.Services.AddSingleton(); ``` ### 同步支援 Adobe PDF Library SDK 不支援動態操作。IronPDF提供可擴充的 Web 應用程式所必備的完整 async/await 功能: ```csharp public async Task GenerateReport() { var renderer = new ChromePdfRenderer(); using var pdf = await renderer.RenderHtmlAsPdfAsync(html); return File(pdf.BinaryData, "application/pdf"); } ``` ## 效能最佳化 ### 記憶體使用量比較 |工作場景|Adobe PDF Library SDK|IronPDF| 筆記 | |----------|----------------------|---------|-------| |簡易 PDF|~100 MB|~50 MB|Adobe 載入完整引擎| |複雜的文件|~200 MB|~80 MB|IronPdf 更有效率| |批次 (100 PDF)|高(本機記憶體)|~100 MB|更好地管理 IronPdf| ### 最佳化提示 **重複使用渲染器實例:** ```csharp // Good: Reuse renderer for batch operations var renderer = new ChromePdfRenderer(); foreach (var html in htmlList) { using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs($"output_{i}.pdf"); } ``` **在 Web 應用程式中使用 Async:** ```csharp public async Task GenerateReport() { var renderer = new ChromePdfRenderer(); using var pdf = await renderer.RenderHtmlAsPdfAsync(html); return File(pdf.BinaryData, "application/pdf"); } ``` ## 排除常見的遷移問題 ### 問題:基於座標的定位無法運作。 Adobe 使用 PostScript 點坐標。 IronPdf 使用 CSS 定位: ```csharp // Adobe: Point-based new TextRun("Hello", font, 12, new Point(100, 700)); // IronPDF: CSS-based string html = "

Hello

"; ``` ### 問題:頁面大小差異 Adobe 使用 PostScript 點數。 IronPdf 使用枚举或自定义维度: ```csharp // Adobe: Points Rect(0, 0, 612, 792) // Letter // IronPDF: Enum or custom renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter; // Or custom: renderer.RenderingOptions.SetCustomPaperSizeInInches(8.5, 11); ``` ### 問題:未找到字型 Adobe 要求手動嵌入字型。 IronPdf 會自動處理字型: ```csharp // IronPDF: Use web fonts if needed string html = @" "; ``` ### 問題:SaveFlags 不可用。 Adobe 使用儲存旗號組合。 IronPdf 使用直接儲存: ```csharp // Adobe doc.Save(SaveFlags.Full | SaveFlags.Incremental, path); //IronPDF- full save is default pdf.SaveAs(path); ``` ## 遷移後檢查清單 完成程式碼遷移後,請驗證下列事項: - [ ] 執行所有現有的單元與整合測試 - [ ] 比較 PDF 輸出與先前版本的視覺效果 - [ ] 在暫存環境中測試所有 PDF 工作流程 - [ ] 驗證授權是否正常運作 (`IronPdf.License.IsLicensed`) - [ ] 與先前實作比較的效能基準 - [ ] 移除 Adobe 授權配置 - [ ] 更新 CI/CD 管道的相依性 - [ ] 從專案中移除所有 Adobe PDF Library DLL - [ ] 為您的開發團隊記錄新的模式 ## Future-Proofing Your PDF Infrastructure 由於 .NET 10 即將推出,而 C# 14 也將引進新的語言功能,因此選擇一個積極開發的 .NET PDF 函式庫可確保與不斷演進的執行時間功能相容。IronPDFfor .NET 承諾支援最新的 .NET 版本,這意味著當專案延伸至 2025 年和 2026 年時,您的移轉投資將獲得回報。 ## 其他資源 - [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/) --- 從Adobe PDF Library SDK轉換到IronPDF可大幅簡化您的 PDF 生成程式碼庫,同時將授權成本降低一個數量級。 從低階頁面建構轉換到 HTML/CSS 渲染,可省去數百行的座標計算、字型管理和生命週期處理程式碼。 對於建置現代 .NET 應用程式的團隊而言,IronPDF 提供了同等的功能,其開發人員友善的 API 專為當代開發工作流程而設計。
Curtis Chau
技術作家

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

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