跳過到頁腳內容
遷移指南

如何在 C# 中從 BitMiracle Docotic PDF 遷移到 IronPDF

從BitMiracle Docotic PDF遷移到 IronPDF:完整的 C# 遷移指南。

BitMiracle Docotic PDF 是一個廣受好評的 .NET PDF 函式庫,以其 100% 的管理代碼架構和廣泛的程式化 PDF 操作功能而聞名。 然而,其模組化的附加元件結構 (HTML-to-PDF轉換、排版功能和其他功能需要獨立的套件),增加了專案管理和授權的複雜性。 本綜合指南提供了從BitMiracle Docotic PDF到IronPDF的逐步遷移路徑 -IronPDFfor .NET 是一個統一的 .NET PDF 函式庫,內建了基於 Chromium 的 HTML 渲染功能,所有功能都包含在單一的 NuGet 套件中。

為什麼要從BitMiracle Docotic PDF轉移到 IronPDF? 雖然BitMiracle Docotic PDF提供強大的 PDF 操作功能,但仍有幾個因素促使開發團隊尋找架構更精簡的替代方案。 ### 套件架構比較 BitMiracle Docotic PDF 使用模組化的附加元件方式,需要多個套件才能達到完整的功能: |範疇|BitMiracle Docotic PDF|IronPDF| |--------|-------------|---------| |**HTML轉PDF**|需要單獨的附加元件 (HtmlToPdf)|內建核心功能| |**套件結構**|核心 + 多個附加元件|單一 NuGet 套件| |**授權模式**|按附加元件授權|所有功能包括| |**API複雜性**|每個附加元件有獨立的名稱空間|統一 API| |**HTML 引擎**。|Chromium (透過附加元件)|Chromium (內建)| |**社群大小**|較小|規模更大、資源更多| |**說明文件**|技術參考|廣泛的教學| ### 功能對等 這兩個函式庫都支援全面的 PDF 功能: |特點|BitMiracle Docotic PDF|IronPDF| |---------|-------------|---------| |從零開始建立 PDF|✅|✅| |HTML 至 PDF|✅ (需要附加元件)|✅(內建)| |URL 至 PDF|✅ (需要附加元件)|✅(內建)| |PDF 操作|✅|✅| |文字擷取|✅|✅| |合併/分割|✅|✅| |數位簽名|✅|✅| |加密|✅|✅| |表格填寫|✅|✅| |符合 PDF/A 規範|✅|✅| ### 方法上的主要差異 BitMiracle Docotic PDF 使用基於畫布的繪圖與座標定位 (`canvas.DrawString(x,y,text)`),而IronPDF則利用 HTML/CSS 進行排版與定位。 這代表了一種模式的轉變,簡化了熟悉網路技術的開發人員的內容創作。 ## 遷移前的準備工作 ### 先決條件 確保您的環境符合這些要求: - .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/) 網站免費試用) ### 審核BitMiracle Docotic PDF使用情況 在您的解決方案目錄中執行這些指令,以識別所有 Docotic.Pdf 引用: ```bash # Find all Docotic.Pdf usages in your codebase grep -r "using BitMiracle.Docotic" --include="*.cs" . grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" . # Find NuGet package references grep -r "Docotic.Pdf" --include="*.csproj" . ``` ### 可預期的重大變更 |變更|BitMiracle Docotic PDF|IronPDF|影響力| |--------|-------------|---------|--------| |**HTML 渲染**|需要 HtmlToPdf 附加元件| 內建 |移除附加套件| |**頁面索引**|以 0 為基礎 (`Pages[0]`)|以 0 為基礎 (`Pages[0]`)|不需要變更| |**坐標系統**|左下方來源|HTML/CSS 流程|使用 CSS 進行定位| |**畫布繪圖**|<代碼>PdfCanvas.DrawText()page.GetText()pdf.ExtractAllText()document.Save(路徑)pdf.SaveAs(路徑)PdfDocument.Load(stream)PdfDocument.Load(bytes)PdfDocument.FromBinaryData(bytes)document.Save(路徑)pdf.SaveAs(路徑)document.PageCountpdf.PageCountdocument.Dispose()pdf.CopyPages(start, end)

Hello World

This isHTML 至 PDFconversion.

"; pdf.CreatePage(html); pdf.Save("output.pdf"); } Console.WriteLine("PDF created successfully"); } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string html = "

Hello World

This isHTML 至 PDFconversion.

"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } ``` IronPDF 消除了 `using` 語句的要求,並提供專用的 `ChromePdfRenderer` 類,清楚地指出其基於 Chromium 的渲染能力。 如需更多 HTML 轉換選項,請參閱 [HTML to PDF 文件](https://ironpdf.com/how-to/html-file-to-pdf/)。 ### 合併多個 PDF 文件 **BitMiracle Docotic PDF 實作:** ```csharp // NuGet: Install-Package Docotic.Pdf using BitMiracle.Docotic.Pdf; using System; class Program { static void Main() { using (var pdf1 = new PdfDocument("document1.pdf")) using (var pdf2 = new PdfDocument("document2.pdf")) { pdf1.Append(pdf2); pdf1.Save("merged.pdf"); } Console.WriteLine("PDFs merged successfully"); } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; using System.Collections.Generic; class Program { static void Main() { var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var merged = PdfDocument.Merge(new List{ pdf1, pdf2 }); merged.SaveAs("merged.pdf"); Console.WriteLine("PDFs merged successfully"); } } ``` IronPdf 的靜態 `Merge` 方法可直接接受多個文件,提供比迭代 `Append` 模式更簡潔的 API。 如需更多選項,請參閱 [IronPDF合併文件](https://ironpdf.com/how-to/merge-split-pdfs/)。 ### 文字萃取 **BitMiracle Docotic PDF 實作:** ```csharp // NuGet: Install-Package Docotic.Pdf using BitMiracle.Docotic.Pdf; using System; class Program { static void Main() { using (var pdf = new PdfDocument("document.pdf")) { string allText = ""; foreach (var page in pdf.Pages) { allText += page.GetText(); } Console.WriteLine("Extracted text:"); Console.WriteLine(allText); } } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var pdf = PdfDocument.FromFile("document.pdf"); string allText = pdf.ExtractAllText(); Console.WriteLine("Extracted text:"); Console.WriteLine(allText); } } ``` IronPDF 將文字擷取從多行迴圈縮減為單一方法呼叫。 如需更多萃取選項,請參閱 [文字萃取文件](https://ironpdf.com/how-to/pdf-text-extraction/)。 ### 密碼保護與加密 **IronPDF 實作:** ```csharp using IronPdf; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Confidential Document

"); // Set security pdf.SecuritySettings.UserPassword = "userPassword"; pdf.SecuritySettings.OwnerPassword = "ownerPassword"; pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SaveAs("protected.pdf"); ``` 如需全面的安全選項,請參閱 [加密說明文件](https://ironpdf.com/how-to/pdf-encryption-and-decryption/)。 ### 頁首和頁尾 **IronPDF 實作:** ```csharp using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @"
Company Header - Confidential
", DrawDividerLine = true, MaxHeight = 30 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @"
Page {page} of {total-pages}
", DrawDividerLine = true, MaxHeight = 25 }; var pdf = renderer.RenderHtmlAsPdf("

Document Content

"); pdf.SaveAs("with_headers.pdf"); ``` IronPdf 支援占位符記號,如 `{page}` 和 `{total-pages}` 以進行動態頁碼編排。 如需更多選項,請參閱 [headers and footers 文件](https://ironpdf.com/how-to/headers-and-footers/)。 ## 關鍵遷移注意事項 ### Canvas 到 HTML 的範式轉換 BitMiracle Docotic PDF 基於畫布的繪圖方式必須以 CSS 定位轉換為 HTML: **BitMiracle Docotic PDF 模式:** ```csharp var canvas = pdfPage.Canvas; canvas.DrawString(50, 50, "Hello, World!"); ``` **IronPDF模式:** ```csharp var html = "
Hello, World!
"; var pdf = renderer.RenderHtmlAsPdf(html); ``` ### 同頁索引 這兩個函式庫都使用基於 0 的索引(`Pages[0]` 是第一頁)--不需要變更頁面存取代碼。 ### 不需要處理。 IronPdf 不需要 `using` 語句進行記憶體管理,簡化了程式碼結構: ```csharp //BitMiracle Docotic PDF- disposal required using (var pdf = new PdfDocument("input.pdf")) { // operations } //IronPDF- disposal optional var pdf = PdfDocument.FromFile("input.pdf"); // operations - no using statement needed ``` ### 同步支援 BitMiracle Docotic PDF 的 HtmlToPdf 附加元件處處需要使用 async 模式。IronPDF支援同步和異步方法: ```csharp // Synchronous var pdf = renderer.RenderHtmlAsPdf(html); // Asynchronous var pdf = await renderer.RenderHtmlAsPdfAsync(html); ``` ## ASP.NET Core 整合。 **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"); } } ``` ## 遷移後檢查清單 完成程式碼遷移後,請驗證下列事項: - [ ] 執行所有的單元測試,以驗證 PDF 產生是否正常運作 - [ ] 比較 PDF 輸出品質(IronPDF 的 Chromium 引擎渲染可能略有不同 - 通常較好) - [ ] 確認文字擷取的正確性 - [ ] 測試表格填寫功能 - [如果適用,驗證數位簽章 - [ ] 效能測試批次作業 - [ ] 在所有目標環境中進行測試 - [ ] 更新 CI/CD 管道 - [ ] 移除 Docotic.Pdf 授權檔案 ## Future-Proofing Your PDF Infrastructure 由於 .NET 10 即將推出,而 C# 14 也將引進新的語言功能,因此選擇具有統一架構的 PDF 函式庫可簡化相依性管理,並確保功能可用性的一致性。 IronPdf 的單一套件方式意味著當專案延伸至 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/) --- 從BitMiracle Docotic PDF遷移到IronPDF可消除管理多個附加套件的複雜性,同時提供相同的基於 Chromium 的 HTML 渲染功能。 從以畫布為基礎的繪圖過渡到 HTML/CSS 定位,可利用大多數 .NET 開發人員已具備的網頁開發技能,進而產生更易維護的 PDF 生成程式碼。
Curtis Chau
技術作家

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

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