MIGRATION GUIDES How to Migrate from ExpertPdf to IronPDF in C# Curtis Chau 發表日期:2026年1月11日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 ExpertPdf 是一款針對 .NET 的商業 HTML 轉 PDF 轉換器,多年來一直為開發人員提供服務。 然而,ExpertPdf 在當今快速發展的發展環境中面臨著重大挑戰:文檔自 2018 年以來一直停滯不前,依賴於缺少現代 CSS3 功能的舊版 Chrome,使用過時技術卻收取 550 美元至 1200 美元的高價,以及產品套件分散,合併、安全和拆分都需要單獨的許可證。 本綜合指南提供了從 專家PDF 到 IronPDF 的逐步遷移路徑——IronPDF 是一個現代化的 .NET PDF 庫,具有最新的 Chromium 渲染、每月更新和一體化軟體包架構。 為什麼要從 ExpertPDF 遷移到 IronPDF? ExpertPdf 提出了一些挑戰,促使開發團隊評估現代替代方案。 了解這些問題對於制定遷移策略至關重要。 ExpertPDF 問題 1.文檔自 2018 年以來一直處於凍結狀態: 專家PDF 的文檔已經超過 6 年沒有更新了。 隨著 .NET 生態系統的發展,尋找最新資訊、範例和最佳實踐變得越來越困難。 2.過時的 Chrome 版本: 專家PDF 依賴舊版本的 Chrome 進行渲染。 現代 CSS3 功能(Flexbox、Grid、CSS 變數)可能無法正確渲染,且未套用安全性修補程式。 3.傳統技術的高價定價: 專家PDF 的授權價格為 550 美元至 1200 美元,卻提供過時的渲染技術。 4.產品套件分散: 專家PDF 為不同的功能單獨銷售軟體包-HtmlToPdf Converter、PDF Merger、PDF Security、PDF Splitter 和 PDF to Image-每個軟體包都需要單獨的許可。 5.現代 .NET 支援有限:雖然 專家PDF 有 .NET Core 包,但它們落後於現代 .NET 版本和實踐。 架構比較 方面 專家PDF IronPDF 文件 自2018年起冷凍 持續更新 渲染引擎 舊版 Chrome 最新鉻 CSS 支援 有限的 CSS3 完整的 CSS3(Flexbox、Grid) 價格 550-1200美元 價格競爭力強 更新頻率 不頻繁 每月發布 產品模型 碎片化(5個以上DLL檔) 一體化圖書館 近代 .NET 有限的 .NET 6/7/8/9+ 原生 非同步支援 有限的 完全異步/等待 遷移的主要優勢 1.現代渲染:採用最新的 Chromium 引擎,實現像素級完美輸出 2.一體化軟體套件:在一個 NuGet 套件中完成 PDF 產生、合併、安全保護和擷取。 3.積極開發:每月更新,包含新功能和安全補丁 4.更完善的文件:全面的教學與範例 5.真正的跨平台:支援 Windows、Linux、macOS 和 Docker。 遷移前準備 先決條件 請確保您的環境符合以下要求: .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9 Visual Studio 2019+ 或帶有 C# 擴充功能的 VS Code NuGet 套件管理器訪問 IronPDF 許可證金鑰(可在ironpdf.com提供免費試用) 審計專家PDF使用情況 在解決方案目錄中執行以下命令,以識別所有 專家PDF 參考: # Find all 專家PDF references grep -r "ExpertPdf\|PdfConverter\|PDFMerge\|PdfSecurityManager" --include="*.cs" . # Check NuGet packages dotnet list package | grep -i "ExpertPdf" # Find all 專家PDF references grep -r "ExpertPdf\|PdfConverter\|PDFMerge\|PdfSecurityManager" --include="*.cs" . # Check NuGet packages dotnet list package | grep -i "ExpertPdf" SHELL 常見的 專家PDF 軟體包: ExpertPdf.HtmlToPdf - HTML 轉 PDF 轉換 ExpertPdf.PDFMerge - PDF 合併 ExpertPdf.PDFSecurity - 加密和密碼 ExpertPdf.PDFSplit - PDF 分割 ExpertPdf.PdfToImage - PDF 轉影像 理解核心模式變化 ExpertPdf 使用PdfConverter ,並採用直接傳回位元組數組的方法。 IronPDF 使用ChromePdfRenderer傳回PdfDocument對象,這些物件在儲存之前提供額外的操作功能。 逐步遷移過程 步驟 1:更新 NuGet 套件 移除所有 ExpertPDF 軟體包,然後安裝 IronPDF: # Remove all 專家PDF packages dotnet remove package ExpertPdf.HtmlToPdf dotnet remove package ExpertPdf.PDFMerge dotnet remove package ExpertPdf.PDFSecurity dotnet remove package ExpertPdf.PDFSplit dotnet remove package ExpertPdf.PdfToImage # Install IronPDF (includes all features) dotnet add package IronPdf # Remove all 專家PDF packages dotnet remove package ExpertPdf.HtmlToPdf dotnet remove package ExpertPdf.PDFMerge dotnet remove package ExpertPdf.PDFSecurity dotnet remove package ExpertPdf.PDFSplit dotnet remove package ExpertPdf.PdfToImage # Install IronPDF (includes all features) dotnet add package IronPdf SHELL 步驟 2:更新命名空間引用 將 專家PDF 命名空間替換為 IronPDF: // Remove these using ExpertPdf.HtmlToPdf; // Add this using IronPdf; // Remove these using ExpertPdf.HtmlToPdf; // Add this using IronPdf; $vbLabelText $csharpLabel 步驟 3:設定許可證 ExpertPdf採用轉換器授權的方式。 IronPDF採用單一全球授權: // Add at application startup (Program.cs or Startup.cs) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Add at application startup (Program.cs or Startup.cs) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 完整的 API 遷移參考 核心類別映射 專家PDF 類 IronPDF當量 筆記 PdfConverter ChromePdfRenderer 主轉換類 PdfDocumentOptions ChromePdfRenderOptions 透過RenderingOptions PdfHeaderOptions TextHeaderFooter或HtmlHeaderFooter 可配置 PdfFooterOptions TextHeaderFooter或HtmlHeaderFooter 可配置 PDFMerge PdfDocument.Merge() 靜態方法 方法映射 ExpertPDF 方法 IronPDF 方法 筆記 pdfConverter.GetPdfBytesFromHtmlString(html) renderer.RenderHtmlAsPdf(html).BinaryData pdfConverter.GetPdfBytesFromUrl(url) renderer.RenderUrlAsPdf(url).BinaryData pdfConverter.GetPdfBytesFromHtmlFile(path) renderer.RenderHtmlFileAsPdf(path).BinaryData pdfConverter.SavePdfFromUrlToFile(url, path) renderer.RenderUrlAsPdf(url).SaveAs(path) 兩步 選項映射 ExpertPdf選項 IronPDF渲染選項 筆記 PdfDocumentOptions.PdfPageSize = PdfPageSize.A4 PaperSize = PdfPaperSize.A4 PdfDocumentOptions.PdfPageOrientation = Portrait PaperOrientation = PdfPaperOrientation.Portrait PdfDocumentOptions.MarginTop MarginTop 相同的房產名稱 PdfHeaderOptions.HeaderText TextHeader.CenterText PdfFooterOptions.FooterText TextFooter.RightText 頁碼標記轉換 ExpertPDF 和 IronPDF 使用不同的佔位語法來表示頁碼: 專家PDF IronPDF &p; {page} &P; {total-pages} 程式碼遷移範例 HTML 轉 PDF 基本的 HTML 到 PDF 轉換體現了從 專家PDF 的位元組數組模式到 IronPDF 的文檔物件方法的轉變。 ExpertPdf實作: // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Convert HTML string to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file System.IO.File.WriteAllBytes("output.pdf", pdfBytes); Console.WriteLine("PDF created successfully!"); } } // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Convert HTML string to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlString("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file System.IO.File.WriteAllBytes("output.pdf", pdfBytes); Console.WriteLine("PDF created successfully!"); } } $vbLabelText $csharpLabel IronPDF實現: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF from HTML string var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully!"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF from HTML string var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF document.</p>"); // Save to file pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully!"); } } $vbLabelText $csharpLabel IronPDF 的方法傳回PdfDocument對象,因此可以在儲存之前進行額外的操作(合併、浮水印、安全設定)。 更多選項,請參閱HTML 轉 PDF 文件。 指向包含頁面設定的 PDF 檔案的 URL ExpertPdf實作: // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Set page size and orientation pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait; // Convert URL to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com"); // Save to file System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes); Console.WriteLine("PDF from URL created successfully!"); } } // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Set page size and orientation pdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; pdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait; // Convert URL to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromUrl("https://www.example.com"); // Save to file System.IO.File.WriteAllBytes("webpage.pdf", pdfBytes); Console.WriteLine("PDF from URL created successfully!"); } } $vbLabelText $csharpLabel IronPDF實現: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Set page size and orientation renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; // Convert URL to PDF var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); // Save to file pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF from URL created successfully!"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Set page size and orientation renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait; // Convert URL to PDF var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); // Save to file pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF from URL created successfully!"); } } $vbLabelText $csharpLabel IronPDF 的RenderingOptions提供了對頁面配置的直接屬性存取。 更多選項請參閱PDF 文件的 URL 。 附頁碼的頁首和頁尾 此範例示範了頁首/頁尾配置的關鍵差異-ExpertPdf 使用單獨的PdfHeaderOptions和PdfFooterOptions類,帶有&p; / &P;標記,而 IronPDF 使用TextHeaderFooter帶有{page} / {total-pages}佔位符。 ExpertPdf實作: // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Enable header pdfConverter.PdfHeaderOptions.ShowHeader = true; pdfConverter.PdfHeaderOptions.HeaderText = "Document Header"; pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center; // Enable footer with page numbers pdfConverter.PdfFooterOptions.ShowFooter = true; pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;"; pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right; // Convert HTML file to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html"); // Save to file System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes); Console.WriteLine("PDF with headers and footers created successfully!"); } } // NuGet: Install-Package ExpertPdf.HtmlToPdf using ExpertPdf.HtmlToPdf; using System; class Program { static void Main() { // Create the PDF converter PdfConverter pdfConverter = new PdfConverter(); // Enable header pdfConverter.PdfHeaderOptions.ShowHeader = true; pdfConverter.PdfHeaderOptions.HeaderText = "Document Header"; pdfConverter.PdfHeaderOptions.HeaderTextAlignment = HorizontalTextAlign.Center; // Enable footer with page numbers pdfConverter.PdfFooterOptions.ShowFooter = true; pdfConverter.PdfFooterOptions.FooterText = "Page &p; of &P;"; pdfConverter.PdfFooterOptions.FooterTextAlignment = HorizontalTextAlign.Right; // Convert HTML file to PDF byte[] pdfBytes = pdfConverter.GetPdfBytesFromHtmlFile("input.html"); // Save to file System.IO.File.WriteAllBytes("output-with-header-footer.pdf", pdfBytes); Console.WriteLine("PDF with headers and footers created successfully!"); } } $vbLabelText $csharpLabel IronPDF實現: // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Configure header renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Document Header", DrawDividerLine = true }; // Configure footer with page numbers renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { RightText = "Page {page} of {total-pages}", DrawDividerLine = true }; // Convert HTML file to PDF var pdf = renderer.RenderHtmlFileAsPdf("input.html"); // Save to file pdf.SaveAs("output-with-header-footer.pdf"); Console.WriteLine("PDF with headers and footers created successfully!"); } } // NuGet: Install-Package IronPdf using IronPdf; using System; class Program { static void Main() { // Create a PDF renderer var renderer = new ChromePdfRenderer(); // Configure header renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { CenterText = "Document Header", DrawDividerLine = true }; // Configure footer with page numbers renderer.RenderingOptions.TextFooter = new TextHeaderFooter() { RightText = "Page {page} of {total-pages}", DrawDividerLine = true }; // Convert HTML file to PDF var pdf = renderer.RenderHtmlFileAsPdf("input.html"); // Save to file pdf.SaveAs("output-with-header-footer.pdf"); Console.WriteLine("PDF with headers and footers created successfully!"); } } $vbLabelText $csharpLabel IronPDF 的TextHeaderFooter提供LeftText 、 CenterText和RightText屬性,並可選配分隔線。 對於基於 HTML 的標頭,請使用HtmlHeaderFooter 。 更多選項請參閱頁首和頁尾文件。 關鍵遷移說明 許可證密鑰位置 ExpertPdf採用轉換器授權的方式。 IronPDF 在啟動時使用一次性的全域授權集: // 專家PDF - per converter pdfConverter.LicenseKey = "EXPERTPDF-LICENSE"; // IronPDF - global, set once IronPdf.License.LicenseKey = "IRONPDF-LICENSE"; // 專家PDF - per converter pdfConverter.LicenseKey = "EXPERTPDF-LICENSE"; // IronPDF - global, set once IronPdf.License.LicenseKey = "IRONPDF-LICENSE"; $vbLabelText $csharpLabel 頁碼標記轉換 將 專家PDF 標記替換為 IronPDF 佔位符: // ExpertPdf "Page &p; of &P;" // IronPDF "Page {page} of {total-pages}" // ExpertPdf "Page &p; of &P;" // IronPDF "Page {page} of {total-pages}" $vbLabelText $csharpLabel 碎片化包裹合併 ExpertPdf 的各個獨立軟體包(PDFMerge、PDFSecurity、PDFSplit、PdfToImage)都包含在 IronPDF 的單一軟體包中: // 專家PDF - requires separate PDFMerge package var merger = new PdfMerge(); merger.AppendPDFFile("file1.pdf"); merger.AppendPDFFile("file2.pdf"); merger.SaveMergedPDFToFile("merged.pdf"); // IronPDF - included in main package var pdf1 = PdfDocument.FromFile("file1.pdf"); var pdf2 = PdfDocument.FromFile("file2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); // 專家PDF - requires separate PDFMerge package var merger = new PdfMerge(); merger.AppendPDFFile("file1.pdf"); merger.AppendPDFFile("file2.pdf"); merger.SaveMergedPDFToFile("merged.pdf"); // IronPDF - included in main package var pdf1 = PdfDocument.FromFile("file1.pdf"); var pdf2 = PdfDocument.FromFile("file2.pdf"); var merged = PdfDocument.Merge(pdf1, pdf2); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel 如需更多合併選項,請參閱PDF 合併文件。 自訂頁面尺寸 ExpertPdf 使用點數。 IronPDF 使用毫米作為單位。 換算: points / 72 * 25.4 = mm 遷移後檢查清單 程式碼遷移完成後,請驗證以下內容: 產生PDF檔案的可視化比較 核對頁首/頁尾和頁碼 測試安全/加密設置 驗證合併操作 檢查自訂頁面尺寸 性能基準測試 跨平台測試 刪除 專家PDF 授權文件 更新文檔 讓您的 PDF 基礎架構面向未來 隨著 .NET 10 即將到來,C# 14 也引入了新的語言特性,選擇一個具有活躍開發和現代渲染功能的 PDF 庫可以確保長期的兼容性。 IronPDF 的每月更新和最新的 Chromium 引擎為 PDF 生成奠定了基礎,即使項目擴展到 2025 年和 2026 年,它也能繼續與現代 CSS3 佈局(Flexbox、Grid)正確配合使用——這與 專家PDF 停滯不前的舊版 Chrome 版本截然不同。 其他資源 IronPDF 文件 HTML 轉 PDF 教學課程 API 參考 NuGet 套件 -授權選項 從 專家PDF 遷移到 IronPDF 可以消除文件凍結、舊版 Chrome 渲染、產品許可碎片化以及現代 .NET 支援有限的挑戰。 過渡到使用最新 Chromium 引擎的積極維護庫,可確保您的 PDF 產生與不斷發展的網路標準和 .NET 框架保持同步。 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. 閱讀更多 How to Migrate from FastReport to IronPDF in C#How to Migrate from EO.Pdf 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. 閱讀更多