MIGRATION GUIDES Migrate from ActivePDF to IronPDF: (.NET Guide) Curtis Chau 發表日期:2026年1月11日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 ActivePDF 一直是 .NET 開發人員可靠的 PDF 工具包。 然而,自從 Foxit 收購了該平台以來,許多開發團隊對該平台的未來、授權條款和持續開發感到不確定。 本指南提供了從 ActivePDF 到 IronPDF 的完整、逐步遷移路徑——IronPDF 是一個現代化的、積極維護的 .NET PDF 庫,支援 .NET Framework 4.6.2 到 .NET 9 及更高版本。 為什麼要考慮放棄 ActivePDF? Foxit 收購 ActivePDF 為在 .NET 應用程式中開發 PDF 產生和處理解決方案的開發人員帶來了許多挑戰。 產品前景不明朗 ActivePDF 在 Foxit 的收購下,其發展前景引發了人們對該工具包長期發展道路的疑問。 依賴 ActivePDF 的開發者面臨著庫過時、支援減少和開發停滯的潛在風險。 對於計劃將專案延續到 2025 年和 2026 年的團隊來說,這種不確定性會造成重大的技術風險。 許可證上的複雜情況 此次收購帶來了許可方面的不確定性,可能會使部署變得複雜。 ActivePDF 傳統的機器鎖定許可模式在現代雲端和容器化環境中造成了摩擦,因為在這些環境中,應用程式需要跨基礎設施動態擴展。 遺留架構模式 ActivePDF 的架構體現了一種以有狀態工具包模式為中心的較早的設計理念。 OpenOutputFile / CloseOutputFile工作流程需要明確的檔案句柄管理,這與現代 C# 約定不符,如果處理不當,可能會引入資源管理問題。 安裝和設定開銷 與當代基於 NuGet 的套件管理不同,ActivePDF 在實例化工具包時通常需要手動引用 DLL 和明確路徑配置——這種模式增加了用戶上手的難度,並使 CI/CD 管道變得複雜。 ActivePDF 與 IronPDF:主要區別 在開始遷移程序之前,了解 ActivePDF 和 IronPDF 之間的根本區別有助於對所需的程式碼變更設定預期。 方面 ActivePDF IronPDF 公司狀態 已被 Foxit 收購(未來前景不明) 獨立、清晰的發展路線圖 安裝 手動 DLL 引用 簡單的NuGet 包 API模式 有狀態( OpenOutputFile / CloseOutputFile ) 流暢、函數式 API 許可模式 機器鎖定 基於程式碼的密鑰 .NET 支持 傳統 .NET Framework 重點 Framework 4.6.2 至 .NET 9+ 錯誤處理 整數返回碼 現代基於例外情況的 非同步支援 無法使用 完全支援異步/等待 遷移前準備 審核您的程式碼庫 在開始遷移之前,請確定您的解決方案中所有使用 ActivePDF 的地方。 請在解決方案目錄中執行以下命令: grep -r "using ActivePDF" --include="*.cs" . grep -r "using APToolkitNET" --include="*.cs" . grep -r "APToolkitNET" --include="*.csproj" . grep -r "using ActivePDF" --include="*.cs" . grep -r "using APToolkitNET" --include="*.cs" . grep -r "APToolkitNET" --include="*.csproj" . SHELL 文件重大變更 了解 API 的基本差異有助於制定遷移策略: 類別 ActivePDF 行為 IronPDF行為 移民行動 物件模型 單一Toolkit對象 ChromePdfRenderer + PdfDocument 不同的問題 文件操作 OpenOutputFile() / CloseOutputFile() 直接SaveAs() 移除開倉/關倉 頁面創建 NewPage()方法 自動從 HTML 移除頁面建立調用 傳回值 整數錯誤碼 例外情況 實作 try/catch 頁面尺寸單位 分數(612x792 = 字母) 列舉或毫米 更新測量數據 先決條件 請確保您的環境符合以下要求: .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9 Visual Studio 2019+ 或 JetBrains Rider NuGet 套件管理器訪問 IronPDF 許可證金鑰(可在ironpdf.com提供免費試用) 逐步遷移過程 步驟 1:更新 NuGet 套件 移除 ActivePDF 軟體包,然後安裝 IronPDF: # Remove ActivePDF package dotnet remove package APToolkitNET # Install IronPDF dotnet add package IronPdf # Remove ActivePDF package dotnet remove package APToolkitNET # Install IronPDF dotnet add package IronPdf SHELL 或者,透過 Visual Studio 套件管理器控制台: Uninstall-Package APToolkitNET Install-Package IronPdf 對於手動引用 DLL 的項目,請從.csproj檔案中刪除該引用: <Reference Include="APToolkitNET"> <HintPath>path\to\APToolkitNET.dll</HintPath> </Reference> <Reference Include="APToolkitNET"> <HintPath>path\to\APToolkitNET.dll</HintPath> </Reference> XML 步驟 2:設定許可證密鑰 在應用程式啟動時,在執行任何 PDF 操作之前,請新增 IronPDF 許可證金鑰: // Add at application startup (Program.cs or Startup.cs) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Verify license status bool isLicensed = IronPdf.License.IsLicensed; // Add at application startup (Program.cs or Startup.cs) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Verify license status bool isLicensed = IronPdf.License.IsLicensed; $vbLabelText $csharpLabel 步驟 3:更新命名空間引用 對整個解決方案執行全域查找和取代: 尋找 替換為 using ActivePDF.Toolkit; using IronPdf; using APToolkitNET; using IronPdf; using APToolkitNET.PDFObjects; using IronPdf; using APToolkitNET.Common; using IronPdf; 完整的 API 遷移參考 文件建立方法 ActivePDF 方法 IronPDF當量 筆記 new Toolkit() new ChromePdfRenderer() 渲染器建立 PDF toolkit.OpenOutputFile(path) 無需等效物 最後只要呼叫SaveAs()即可 toolkit.CloseOutputFile() 無需等效物 自動清理 toolkit.AddHTML(html) renderer.RenderHtmlAsPdf(html) 返回PdfDocument toolkit.AddURL(url) renderer.RenderUrlAsPdf(url) URL 轉 PDF toolkit.SaveAs(path) pdf.SaveAs(path) 儲存到文件 文件操作 ActivePDF 方法 IronPDF當量 筆記 toolkit.OpenInputFile(path) PdfDocument.FromFile(path) 載入現有PDF toolkit.AddPDF(path) PdfDocument.Merge() 對於合併操作 toolkit.GetPageCount() pdf.PageCount 物業通道 toolkit.GetText() pdf.ExtractAllText() 文字擷取 頁面配置 ActivePDF 方法 IronPDF當量 toolkit.SetPageSize(612, 792) RenderingOptions.PaperSize = PdfPaperSize.Letter toolkit.SetOrientation("Landscape") RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape toolkit.SetMargins(t, b, l, r) RenderingOptions.MarginTop/Bottom/Left/Right 安全方法 ActivePDF 方法 IronPDF當量 toolkit.Encrypt(password) pdf.SecuritySettings.OwnerPassword toolkit.SetUserPassword(pwd) pdf.SecuritySettings.UserPassword toolkit.SetPermissions(flags) pdf.SecuritySettings.AllowUserXxx toolkit.AddWatermark(text) pdf.ApplyWatermark(html) 程式碼遷移範例 HTML 轉 PDF 將 HTML 字串轉換為 PDF 文件是最常見的 PDF 生成場景之一。 以下是程式碼在遷移過程中的轉換方式。 ActivePDF 實作: // NuGet: Install-Package APToolkitNET using ActivePDF.Toolkit; using System; class Program { static void Main() { Toolkit toolkit = new Toolkit(); string htmlContent = "<html><body><h1>Hello World</h1></body></html>"; if (toolkit.OpenOutputFile("output.pdf") == 0) { toolkit.AddHTML(htmlContent); toolkit.CloseOutputFile(); Console.WriteLine("PDF created successfully"); } } } // NuGet: Install-Package APToolkitNET using ActivePDF.Toolkit; using System; class Program { static void Main() { Toolkit toolkit = new Toolkit(); string htmlContent = "<html><body><h1>Hello World</h1></body></html>"; if (toolkit.OpenOutputFile("output.pdf") == 0) { toolkit.AddHTML(htmlContent); toolkit.CloseOutputFile(); Console.WriteLine("PDF created successfully"); } } } $vbLabelText $csharpLabel IronPDF實現: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string htmlContent = "<html><body><h1>Hello World</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string htmlContent = "<html><body><h1>Hello World</h1></body></html>"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } $vbLabelText $csharpLabel IronPDF 方法消除了明確的文件句柄管理,同時提供了更簡潔、更易讀的程式碼。 對於進階HTML 轉 PDF 場景,IronPDF 的ChromePdfRenderer使用基於 Chromium 的渲染引擎,可實現像素級完美的 CSS 和 JavaScript 支援。 URL 轉 PDF 將網頁捕獲為 PDF 文件也遵循類似的現代化模式。 ActivePDF 實作: using ActivePDF.Toolkit; using System; class Program { static void Main() { Toolkit toolkit = new Toolkit(); string url = "https://www.example.com"; if (toolkit.OpenOutputFile("webpage.pdf") == 0) { toolkit.AddURL(url); toolkit.CloseOutputFile(); Console.WriteLine("PDF from URL created successfully"); } } } using ActivePDF.Toolkit; using System; class Program { static void Main() { Toolkit toolkit = new Toolkit(); string url = "https://www.example.com"; if (toolkit.OpenOutputFile("webpage.pdf") == 0) { toolkit.AddURL(url); toolkit.CloseOutputFile(); Console.WriteLine("PDF from URL created successfully"); } } } $vbLabelText $csharpLabel IronPDF實現: using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string url = "https://www.example.com"; var pdf = renderer.RenderUrlAsPdf(url); pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF from URL created successfully"); } } using IronPdf; using System; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string url = "https://www.example.com"; var pdf = renderer.RenderUrlAsPdf(url); pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF from URL created successfully"); } } $vbLabelText $csharpLabel 合併多個PDF文件 將多個 PDF 文件合併成一個文件,體現了 IronPDF 在文件處理方面的功能性方法。 ActivePDF 實作: using ActivePDF.Toolkit; using System; class Program { static void Main() { Toolkit toolkit = new Toolkit(); if (toolkit.OpenOutputFile("merged.pdf") == 0) { toolkit.AddPDF("document1.pdf"); toolkit.AddPDF("document2.pdf"); toolkit.CloseOutputFile(); Console.WriteLine("PDFs merged successfully"); } } } using ActivePDF.Toolkit; using System; class Program { static void Main() { Toolkit toolkit = new Toolkit(); if (toolkit.OpenOutputFile("merged.pdf") == 0) { toolkit.AddPDF("document1.pdf"); toolkit.AddPDF("document2.pdf"); toolkit.CloseOutputFile(); Console.WriteLine("PDFs merged successfully"); } } } $vbLabelText $csharpLabel 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(pdf1, pdf2); merged.SaveAs("merged.pdf"); Console.WriteLine("PDFs merged successfully"); } } 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(pdf1, pdf2); merged.SaveAs("merged.pdf"); Console.WriteLine("PDFs merged successfully"); } } $vbLabelText $csharpLabel 如需更進階的合併情境(包括選擇性頁面擷取),請參閱PDF 合併文件。 新增頁首和頁尾 ActivePDF 實作: using ActivePDF.Toolkit; public void CreatePdfWithHeaderFooter(string html, string outputPath) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenOutputFile(outputPath) == 0) { toolkit.SetHeader("My Document", 12, "Arial"); toolkit.SetFooter("Page %p of %P", 10, "Arial"); toolkit.AddHTML(html); toolkit.CloseOutputFile(); } } using ActivePDF.Toolkit; public void CreatePdfWithHeaderFooter(string html, string outputPath) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenOutputFile(outputPath) == 0) { toolkit.SetHeader("My Document", 12, "Arial"); toolkit.SetFooter("Page %p of %P", 10, "Arial"); toolkit.AddHTML(html); toolkit.CloseOutputFile(); } } $vbLabelText $csharpLabel IronPDF實現: using IronPdf; public void CreatePdfWithHeaderFooter(string html, string outputPath) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "My Document", FontSize = 12, FontFamily = "Arial" }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}", FontSize = 10, FontFamily = "Arial" }; using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(outputPath); } using IronPdf; public void CreatePdfWithHeaderFooter(string html, string outputPath) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "My Document", FontSize = 12, FontFamily = "Arial" }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}", FontSize = 10, FontFamily = "Arial" }; using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(outputPath); } $vbLabelText $csharpLabel IronPDF 支援以文字和HTML 為基礎的頁首和頁尾,提供完全的設計彈性。 密碼保護和安全 ActivePDF 實作: using ActivePDF.Toolkit; public void ProtectPdf(string inputPath, string outputPath, string password) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenInputFile(inputPath) == 0) { toolkit.Encrypt(password); toolkit.SetUserPassword(password); toolkit.SetPermissions(4); // Print only toolkit.SaveAs(outputPath); toolkit.CloseInputFile(); } } using ActivePDF.Toolkit; public void ProtectPdf(string inputPath, string outputPath, string password) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenInputFile(inputPath) == 0) { toolkit.Encrypt(password); toolkit.SetUserPassword(password); toolkit.SetPermissions(4); // Print only toolkit.SaveAs(outputPath); toolkit.CloseInputFile(); } } $vbLabelText $csharpLabel IronPDF實現: using IronPdf; public void ProtectPdf(string inputPath, string outputPath, string password) { using var pdf = PdfDocument.FromFile(inputPath); pdf.SecuritySettings.OwnerPassword = password; pdf.SecuritySettings.UserPassword = password; pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs(outputPath); } using IronPdf; public void ProtectPdf(string inputPath, string outputPath, string password) { using var pdf = PdfDocument.FromFile(inputPath); pdf.SecuritySettings.OwnerPassword = password; pdf.SecuritySettings.UserPassword = password; pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs(outputPath); } $vbLabelText $csharpLabel IronPDF 的安全設定 API使用強型別枚舉而非整數標誌,對文件權限進行精細控制。 文字擷取 ActivePDF 實作: using ActivePDF.Toolkit; public string ExtractText(string pdfPath) { Toolkit toolkit = new Toolkit(); string text = ""; if (toolkit.OpenInputFile(pdfPath) == 0) { int pageCount = toolkit.GetPageCount(); for (int i = 1; i <= pageCount; i++) { text += toolkit.GetTextFromPage(i) + "\n"; } toolkit.CloseInputFile(); } return text; } using ActivePDF.Toolkit; public string ExtractText(string pdfPath) { Toolkit toolkit = new Toolkit(); string text = ""; if (toolkit.OpenInputFile(pdfPath) == 0) { int pageCount = toolkit.GetPageCount(); for (int i = 1; i <= pageCount; i++) { text += toolkit.GetTextFromPage(i) + "\n"; } toolkit.CloseInputFile(); } return text; } $vbLabelText $csharpLabel IronPDF實現: using IronPdf; public string ExtractText(string pdfPath) { using var pdf = PdfDocument.FromFile(pdfPath); return pdf.ExtractAllText(); } using IronPdf; public string ExtractText(string pdfPath) { using var pdf = PdfDocument.FromFile(pdfPath); return pdf.ExtractAllText(); } $vbLabelText $csharpLabel IronPDF 的實作方式將多行文字擷取簡化為單一方法呼叫。 添加浮水印 ActivePDF 實作: using ActivePDF.Toolkit; public void AddWatermark(string inputPath, string outputPath, string watermarkText) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenInputFile(inputPath) == 0) { int pageCount = toolkit.GetPageCount(); for (int i = 1; i <= pageCount; i++) { toolkit.SetPage(i); toolkit.AddWatermark(watermarkText, 45, 0.5f); } toolkit.SaveAs(outputPath); toolkit.CloseInputFile(); } } using ActivePDF.Toolkit; public void AddWatermark(string inputPath, string outputPath, string watermarkText) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenInputFile(inputPath) == 0) { int pageCount = toolkit.GetPageCount(); for (int i = 1; i <= pageCount; i++) { toolkit.SetPage(i); toolkit.AddWatermark(watermarkText, 45, 0.5f); } toolkit.SaveAs(outputPath); toolkit.CloseInputFile(); } } $vbLabelText $csharpLabel IronPDF實現: using IronPdf; public void AddWatermark(string inputPath, string outputPath, string watermarkText) { using var pdf = PdfDocument.FromFile(inputPath); pdf.ApplyWatermark( $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>", rotation: 45, opacity: 50); pdf.SaveAs(outputPath); } using IronPdf; public void AddWatermark(string inputPath, string outputPath, string watermarkText) { using var pdf = PdfDocument.FromFile(inputPath); pdf.ApplyWatermark( $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>", rotation: 45, opacity: 50); pdf.SaveAs(outputPath); } $vbLabelText $csharpLabel IronPDF基於 HTML 的浮水印功能支援 CSS 樣式,無需逐頁迭代即可實現完全的設計控制。 ASP.NET Core 集成 現代 Web 應用程式從 IronPDF 更簡潔的整合模式中受益匪淺。 ActivePDF 模式: [HttpPost] public IActionResult GeneratePdf([FromBody] ReportRequest request) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenOutputFile("temp.pdf") == 0) { toolkit.AddHTML(request.Html); toolkit.CloseOutputFile(); byte[] bytes = System.IO.File.ReadAllBytes("temp.pdf"); return File(bytes, "application/pdf", "report.pdf"); } return BadRequest("PDF generation failed"); } [HttpPost] public IActionResult GeneratePdf([FromBody] ReportRequest request) { Toolkit toolkit = new Toolkit(); if (toolkit.OpenOutputFile("temp.pdf") == 0) { toolkit.AddHTML(request.Html); toolkit.CloseOutputFile(); byte[] bytes = System.IO.File.ReadAllBytes("temp.pdf"); return File(bytes, "application/pdf", "report.pdf"); } return BadRequest("PDF generation failed"); } $vbLabelText $csharpLabel IronPDF 圖案: [HttpPost] public IActionResult GeneratePdf([FromBody] ReportRequest request) { var renderer = new ChromePdfRenderer(); using var pdf = renderer.RenderHtmlAsPdf(request.Html); return File(pdf.BinaryData, "application/pdf", "report.pdf"); } [HttpPost] public IActionResult GeneratePdf([FromBody] ReportRequest request) { var renderer = new ChromePdfRenderer(); using var pdf = renderer.RenderHtmlAsPdf(request.Html); return File(pdf.BinaryData, "application/pdf", "report.pdf"); } $vbLabelText $csharpLabel IronPDF 無需臨時文件,直接從記憶體返回 PDF 二進位資料。 Web 應用程式的非同步支持 ActivePDF 缺乏原生非同步支援。 IronPDF 提供完整的非同步/等待功能,這對於可擴展的 Web 應用程式至關重要: using IronPdf; public async Task<byte[]> GeneratePdfAsync(string html) { var renderer = new ChromePdfRenderer(); using var pdf = await renderer.RenderHtmlAsPdfAsync(html); return pdf.BinaryData; } using IronPdf; public async Task<byte[]> GeneratePdfAsync(string html) { var renderer = new ChromePdfRenderer(); using var pdf = await renderer.RenderHtmlAsPdfAsync(html); return pdf.BinaryData; } $vbLabelText $csharpLabel 依賴注入配置 對於 .NET 6+ 應用程序,請在您的依賴注入容器中註冊 IronPDF 服務: // Program.cs (.NET 6+) builder.Services.AddSingleton<ChromePdfRenderer>(); // Service wrapper public interface IPdfService { Task<byte[]> GeneratePdfAsync(string html); Task<byte[]> GeneratePdfFromUrlAsync(string url); } public class IronPdfService : IPdfService { private readonly ChromePdfRenderer _renderer; public IronPdfService() { _renderer = new ChromePdfRenderer(); _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; } public async Task<byte[]> GeneratePdfAsync(string html) { using var pdf = await _renderer.RenderHtmlAsPdfAsync(html); return pdf.BinaryData; } public async Task<byte[]> GeneratePdfFromUrlAsync(string url) { using var pdf = await _renderer.RenderUrlAsPdfAsync(url); return pdf.BinaryData; } } // Program.cs (.NET 6+) builder.Services.AddSingleton<ChromePdfRenderer>(); // Service wrapper public interface IPdfService { Task<byte[]> GeneratePdfAsync(string html); Task<byte[]> GeneratePdfFromUrlAsync(string url); } public class IronPdfService : IPdfService { private readonly ChromePdfRenderer _renderer; public IronPdfService() { _renderer = new ChromePdfRenderer(); _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; } public async Task<byte[]> GeneratePdfAsync(string html) { using var pdf = await _renderer.RenderHtmlAsPdfAsync(html); return pdf.BinaryData; } public async Task<byte[]> GeneratePdfFromUrlAsync(string url) { using var pdf = await _renderer.RenderUrlAsPdfAsync(url); return pdf.BinaryData; } } $vbLabelText $csharpLabel 錯誤處理遷移 ActivePDF 使用整數回傳碼,需要找表。 IronPDF 使用現代異常處理技術: ActivePDF 錯誤處理: Toolkit toolkit = new Toolkit(); int result = toolkit.OpenOutputFile(path); if (result != 0) { // Error - need to look up error code Console.WriteLine($"Error code: {result}"); } Toolkit toolkit = new Toolkit(); int result = toolkit.OpenOutputFile(path); if (result != 0) { // Error - need to look up error code Console.WriteLine($"Error code: {result}"); } $vbLabelText $csharpLabel IronPDF錯誤處理: try { var renderer = new ChromePdfRenderer(); using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(path); } catch (IronPdf.Exceptions.IronPdfProductException ex) { Console.WriteLine($"IronPDF Error: {ex.Message}"); } catch (Exception ex) { Console.WriteLine($"General Error: {ex.Message}"); } try { var renderer = new ChromePdfRenderer(); using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(path); } catch (IronPdf.Exceptions.IronPdfProductException ex) { Console.WriteLine($"IronPDF Error: {ex.Message}"); } catch (Exception ex) { Console.WriteLine($"General Error: {ex.Message}"); } $vbLabelText $csharpLabel 效能優化技巧 重用渲染器實例 建立新的ChromePdfRenderer會有初始化開銷。 對於批次操作,請重複使用單一實例: var renderer = new ChromePdfRenderer(); foreach (var html in htmlList) { using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs($"output_{i}.pdf"); } var renderer = new ChromePdfRenderer(); foreach (var html in htmlList) { using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs($"output_{i}.pdf"); } $vbLabelText $csharpLabel 在 Web 應用程式中使用非同步 對於 ASP.NET Core 應用程序,非同步 PDF 產生可以提高吞吐量: public async Task<IActionResult> GenerateReport() { var renderer = new ChromePdfRenderer(); using var pdf = await renderer.RenderHtmlAsPdfAsync(html); return File(pdf.BinaryData, "application/pdf"); } public async Task<IActionResult> GenerateReport() { var renderer = new ChromePdfRenderer(); using var pdf = await renderer.RenderHtmlAsPdfAsync(html); return File(pdf.BinaryData, "application/pdf"); } $vbLabelText $csharpLabel 妥善處置資源 始終使用using語句以確保正確清理: using var pdf = renderer.RenderHtmlAsPdf(html); return pdf.BinaryData; using var pdf = renderer.RenderHtmlAsPdf(html); return pdf.BinaryData; $vbLabelText $csharpLabel 影像壓縮 透過影像壓縮減小輸出檔案大小: using var pdf = renderer.RenderHtmlAsPdf(html); pdf.CompressImages(85); // 85% quality pdf.SaveAs("compressed.pdf"); using var pdf = renderer.RenderHtmlAsPdf(html); pdf.CompressImages(85); // 85% quality pdf.SaveAs("compressed.pdf"); $vbLabelText $csharpLabel 解決常見遷移問題 問題:頁面尺寸差異 ActivePDF 使用點(612x792 = Letter),而 IronPDF 則使用枚舉或毫米: // ActivePDF: Points toolkit.SetPageSize(612, 792); // IronPDF: Use enum renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter; // Or custom in mm: renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4); // ActivePDF: Points toolkit.SetPageSize(612, 792); // IronPDF: Use enum renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter; // Or custom in mm: renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4); $vbLabelText $csharpLabel 問題:缺少 CloseOutputFile 等效項 IronPDF 採用了一個無需明確文件句柄管理的現代範式: // ActivePDF toolkit.OpenOutputFile(path); toolkit.AddHTML(html); toolkit.CloseOutputFile(); // Required! // IronPDF - no open/close needed using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(path); // 'using' handles cleanup // ActivePDF toolkit.OpenOutputFile(path); toolkit.AddHTML(html); toolkit.CloseOutputFile(); // Required! // IronPDF - no open/close needed using var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(path); // 'using' handles cleanup $vbLabelText $csharpLabel 問題:PDF 文件顯示空白 如果依賴 JavaScript 的內容顯示為空白,請設定渲染延遲: var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Or wait for element: renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded"); var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.WaitFor.RenderDelay(2000); // Or wait for element: renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded"); $vbLabelText $csharpLabel 問題:CSS/圖片無法載入 配置相對路徑解析的基本 URL: renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/"); renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/"); $vbLabelText $csharpLabel 遷移後檢查清單 程式碼遷移完成後,請驗證以下內容: 運行所有現有的單元測試和整合測試 將 PDF 輸出結果與先前的版本進行直觀比較 在測試環境中測試所有 PDF 工作流程 驗證許可證是否正常運作( IronPdf.License.IsLicensed ) 與先前的實作進行基準效能比較 刪除舊的 ActivePDF 安裝檔和 DLL 引用 更新 CI/CD 管線依賴項 為您的開發團隊提供 IronPDF 模式文檔 讓您的 PDF 解決方案面向未來 隨著 .NET 10 即將到來,C# 14 也引入了新的語言特性,選擇積極開發的 .NET PDF 程式庫可以確保您的應用程式與不斷發展的執行時間功能保持相容。 IronPDF 致力於支援最新的 .NET 版本,這意味著隨著您的專案擴展到 2025 年和 2026 年,您的遷移投資將獲得回報。 其他資源 IronPDF 文件 HTML 轉 PDF 教學課程 API 參考 NuGet 套件 -授權選項 從 ActivePDF 遷移到 IronPDF 可以讓您 PDF 產生基礎架構現代化,提供更簡潔的 API、更好的 .NET 整合和積極的長期支援。 對遷移的投資會帶來豐厚的回報,包括提高程式碼可維護性、非同步功能以及增強對 PDF 庫持續開發的信心。 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. 閱讀更多 Migrating from Haukcode.DinkToPdf to IronPDFMigrate from Foxit PDF SDK to IronP...
發表日期 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. 閱讀更多