如何在 C# 中將 ExpertPDF 遷移到 IronPDF
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"常見的 專家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步驟 2:更新命名空間引用
將 專家PDF 命名空間替換為 IronPDF:
// Remove these
using ExpertPdf.HtmlToPdf;
// Add this
using IronPdf;// Remove these
using ExpertPdf.HtmlToPdf;
// Add this
using IronPdf;步驟 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";完整的 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!");
}
}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!");
}
}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!");
}
}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!");
}
}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!");
}
}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!");
}
}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";頁碼標記轉換
將 專家PDF 標記替換為 IronPDF 佔位符:
// ExpertPdf
"Page &p; of &P;"
// IronPDF
"Page {page} of {total-pages}"// ExpertPdf
"Page &p; of &P;"
// IronPDF
"Page {page} of {total-pages}"碎片化包裹合併
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");如需更多合併選項,請參閱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 版本截然不同。
其他資源
從 專家PDF 遷移到 IronPDF 可以消除文件凍結、舊版 Chrome 渲染、產品許可碎片化以及現代 .NET 支援有限的挑戰。 過渡到使用最新 Chromium 引擎的積極維護庫,可確保您的 PDF 產生與不斷發展的網路標準和 .NET 框架保持同步。






