跳過到頁腳內容
遷移指南

如何在 C# 中從 Aspose.PDF 轉移到 IronPDF

從 Aspose.PDF 移植到 IronPDF:完整的 C# 遷移指南。

Aspose.PDF for .NET 是一個完善的企業級 PDF 函式庫,以全面的文件處理功能而聞名。 然而,其高昂的定價模式(每位開發人員每年需支付 1,199 美元以上)、已記錄的效能問題(在某些情況下最慢可達 30 倍),以及過時的 Flying Saucer HTML 渲染引擎,都是開發團隊尋求替代方案的強烈理由。 這份全面的指南提供了從 Aspose.PDF 到IronPDF的逐步遷移路徑 -IronPDF是一個原生的 .NET PDF 函式庫,具有基於 Chromium 的現代化渲染、優異的 CSS3 支援以及一次性永久授權。

為何要遷離 Aspose.PDF? 雖然 Aspose.PDF 提供了企業級的功能,但仍有幾個因素驅使開發團隊尋求現代化的替代方案來滿足他們的 PDF 生成需求。 ### 成本比較 Aspose.PDF 採用傳統的企業授權模式,每年續約一次,隨著時間的推移,續約金額會大幅累積: |範疇| Aspose.PDF |IronPDF| |--------|-----------|---------| | **起價** |1,199美元/開發人員/年|一次性 749 美元 (Lite)| |**授權模式**|年度訂閱 + 續訂|永久授權| |**OEM 授權條款**|5,997 加元|包含在較高層級| |<強>支援HtmlLoadOptionsChromePdfRenderer.RenderHtmlAsPdf()PdfFileEditor.Concatenate()PdfDocument.Merge()pdf.ExtractAllText()PDF 文件HtmlLoadOptionsChromePdfRendererPdfDocument.ExtractAllText()PdfFileEditorPdfDocument.Merge()PdfDocument.ApplyWatermark()授權doc.Save(路徑)pdf.SaveAs(路徑)doc.Pages.Countpdf.PageCount

Hello World

This is a PDF from HTML string.

"; using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent))) { var htmlLoadOptions = new HtmlLoadOptions(); var document = new Document(stream, htmlLoadOptions); document.Save("output.pdf"); } Console.WriteLine("PDF created from HTML string"); } } ``` **IronPDF 實作:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { string htmlContent = "

Hello World

This is a PDF from HTML string.

"; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created from HTML string"); } } ``` IronPdf 完全消除了 MemoryStream wrapper - 一個更乾淨、更直覺的 API。 ### HTML 檔案轉換為 PDF **Aspose.PDF 實作:** ```csharp // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; class Program { static void Main() { var htmlLoadOptions = new HtmlLoadOptions(); var document = new Document("input.html", htmlLoadOptions); document.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(); var pdf = renderer.RenderHtmlFileAsPdf("input.html"); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } ``` ### 合併多個 PDF 文件 Aspose.PDF 需要手動反覆檢視頁面。IronPDF提供了靜態 `Merge` 方法。 **Aspose.PDF 實作:** ```csharp // NuGet: Install-Package Aspose.PDF using Aspose.Pdf; using System; class Program { static void Main() { var document1 = new Document("file1.pdf"); var document2 = new Document("file2.pdf"); foreach (Page page in document2.Pages) { document1.Pages.Add(page); } document1.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("file1.pdf"); var pdf2 = PdfDocument.FromFile("file2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); Console.WriteLine("PDFs merged successfully"); } } ``` ### 文字萃取 **Aspose.PDF 實作:** ```csharp using Aspose.Pdf; using Aspose.Pdf.Text; var document = new Document("document.pdf"); var absorber = new TextAbsorber(); foreach (Page page in document.Pages) { page.Accept(absorber); } string extractedText = absorber.Text; Console.WriteLine(extractedText); ``` **IronPDF 實作:** ```csharp using IronPdf; var pdf = PdfDocument.FromFile("document.pdf"); // Extract all text - one line! string allText = pdf.ExtractAllText(); Console.WriteLine(allText); // Or extract from specific page string page1Text = pdf.ExtractTextFromPage(0); ``` IronPDF 將文字擷取從多個步驟簡化為單一方法呼叫。 ### 新增水印 **Aspose.PDF 實作:** ```csharp using Aspose.Pdf; using Aspose.Pdf.Text; var document = new Document("document.pdf"); var textStamp = new TextStamp("CONFIDENTIAL"); textStamp.Background = true; textStamp.XIndent = 100; textStamp.YIndent = 100; textStamp.Rotate = Rotation.on45; textStamp.Opacity = 0.5; textStamp.TextState.Font = FontRepository.FindFont("Arial"); textStamp.TextState.FontSize = 72; textStamp.TextState.ForegroundColor = Color.Red; foreach (Page page in document.Pages) { page.AddStamp(textStamp); } document.Save("watermarked.pdf"); ``` **IronPDF 實作:** ```csharp using IronPdf; using IronPdf.Editing; var pdf = PdfDocument.FromFile("document.pdf"); // HTML-based watermark with full styling control string watermarkHtml = @"
CONFIDENTIAL
"; pdf.ApplyWatermark(watermarkHtml, rotation: 45, verticalAlignment: VerticalAlignment.Middle, horizontalAlignment: HorizontalAlignment.Center); pdf.SaveAs("watermarked.pdf"); ``` IronPdf 使用 [基於 HTML/CSS 的水印](https://ironpdf.com/how-to/backgrounds-and-foregrounds/),透過熟悉的網頁技術提供完整的樣式控制。 ### 密碼保護 **Aspose.PDF 實作:** ```csharp using Aspose.Pdf; var document = new Document("document.pdf"); document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256); document.Save("protected.pdf"); ``` **IronPDF 實作:** ```csharp using IronPdf; var pdf = PdfDocument.FromFile("document.pdf"); // Set passwords pdf.SecuritySettings.UserPassword = "userPassword"; pdf.SecuritySettings.OwnerPassword = "ownerPassword"; // Set permissions pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs("protected.pdf"); ``` IronPDF 透過強化類型的屬性提供細粒度的權限控制。 如需更多選項,請參閱 [加密文件](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
", DrawDividerLine = true, MaxHeight = 30 }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @"
Page {page} of {total-pages}
", DrawDividerLine = true, MaxHeight = 25 }; var pdf = renderer.RenderHtmlAsPdf("

Content here

"); pdf.SaveAs("with_headers.pdf"); ``` IronPdf 支援占位符記號,如 `{page}` 和 `{total-pages}` 以進行動態頁碼編排。 如需更多選項,請參閱 [headers and footers 文件](https://ironpdf.com/how-to/headers-and-footers/)。 ## 關鍵遷移注意事項 ### 頁面索引變更 Aspose.PDF 使用基於 1 的索引。 IronPdf 使用基於 0 的索引: ```csharp // Aspose.PDF - 1-based indexing var firstPage = doc.Pages[1]; // First page var thirdPage = doc.Pages[3]; // Third page //IronPDF- 0-based indexing var firstPage = pdf.Pages[0]; // First page var thirdPage = pdf.Pages[2]; // Third page ``` ### 授權檔案轉碼鑰匙 以基於程式碼的啟動取代 `.lic` 檔案授權: ```csharp // Aspose.PDF var license = new Aspose.Pdf.License(); license.SetLicense("Aspose.Pdf.lic"); // IronPDF IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Or from environment variable IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY"); ``` ## 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"); } } ``` ### 依賴注入配置 ```csharp // Program.cs public void ConfigureServices(IServiceCollection services) { // Set license once IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"]; // Register renderer as scoped service services.AddScoped(); } ``` ## 效能最佳化 ```csharp // 1. Reuse renderer instance private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer(); // 2. Disable unnecessary features for speed var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.EnableJavaScript = false; // If not needed renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay renderer.RenderingOptions.Timeout = 30000; // 30s max // 3. Proper disposal using (var pdf = renderer.RenderHtmlAsPdf(html)) { pdf.SaveAs("output.pdf"); } ``` ## 排除常見的遷移問題 ### 問題:未找到 HtmlLoadOptions。 以<代碼>ChromePdfRenderer
Curtis Chau
技術作家

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

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