如何在 C# 中將 PDFView4NET 遷移到 IronPDF
從 PDFView4NET 遷移到 IronPDF 會將您的 PDF 工作流程從以 UI 為中心的檢視元件轉變為全面的 PDF 產生和操作庫。 本指南提供了一條完整的、循序漸進的遷移路徑,實現了伺服器端處理、Web應用程式支援以及PDFView4NET無法提供的完整PDF生命週期管理功能。
為什麼要從 PDFView4NET 遷移到 IronPDF
了解 PDFView4NET
PDFView4NET 是 C# 中主要專注於 PDF 檢視功能的開發人員的熱門選擇。 PDFView4NET 提供強大的 PDF 檢視控制項,專為 Windows Forms (WinForms) 和 Windows Presentation Foundation (WPF) 應用程式量身打造。 該庫專注於提供流暢的 PDF 查看體驗,使其成為桌面應用程式開發的首選方案。
儘管 PDFView4NET 具有諸多優勢,但它也存在一些局限性,可能會促使開發人員探索更全面的庫,例如 IronPDF,它提供了一個一體化的 PDF 解決方案,涵蓋了創建、查看和操作功能,而不受特定 UI 組件的限制。
僅查看限制
PDFView4NET 主要是一個用於 WinForms 和 WPF 應用程式的 UI 檢視元件。 它專注於顯示 PDF 文件,而不是建立或修改 PDF 文件。 遷移的主要原因:
1.僅查看限制: PDFView4NET 僅用於查看,不用於建立 PDF。
- UI 框架依賴性:需要 WinForms 或 WPF 環境。 對 WinForms 或 WPF 環境的要求可能會限制其在其他上下文中的使用,例如控制台應用程式或 Web 服務,因為 PDFView4NET 不支援這些環境。
3.不支援 HTML 轉 PDF:無法將 HTML 或 URL 轉換為 PDF。 該庫嚴格專注於查看,沒有創建或操作 PDF 文件的內建功能。
4.操作有限:與 IronPDF 的完整功能集相比,僅提供基本編輯功能。
5.不支援伺服器端:無法在 Web 服務或 Azure Functions 中運作。
6.傳統技術:開發活動較少,現代功能更新較少。
PDFView4NET 與 IronPDF 的比較
| 特徵 | PDFView4NET | IronPDF |
|---|---|---|
| 主要關注點 | PDF檢視 | 完整的PDF解決方案(建立、檢視、編輯) |
| 所需的 UI 框架 | WinForms、WPF | 沒有任何 |
| PDF 建立 | 不 | 是的 |
| PDF 處理 | 有限(註) | 是的 |
| 伺服器端 | 不支援。 | 全力支持 |
| Web應用程式 | 不 | 是的 |
| 控制台應用程式 | 有限的 | 全力支持 |
| Azure/Docker | 不 | 是的 |
| HTML 轉 PDF | 不 | 是的 |
| 跨平台上下文 | 不 | 是的 |
| 易於集成 | 中等的 | 高的 |
IronPDF 以其多功能性和全面的功能集脫穎而出,對於需要在 C# 中採用整體方法處理 PDF 的開發人員來說,它尤其具有吸引力。 該程式庫支援 PDF 的建立、檢視、編輯等功能,其應用場景遠遠超出了 PDFView4NET 的檢視功能。
對於計劃在 2025 年和 2026 年採用 .NET 10 和 C# 14 的團隊來說,IronPDF 提供了上下文獨立性——它可以在不同的上下文中使用,包括 Web 應用程式、服務和控制台應用程式。 這種靈活性對於需要跨平台支援和多樣化部署場景的專案至關重要。
開始之前
先決條件
- .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 存取權限:能夠安裝 NuGet 套件
- IronPDF 許可證:請從ironpdf.com取得您的許可證密鑰。
NuGet 套件變更
<!-- Remove PDFView4NET -->
<PackageReference Include="O2S.Components.PDFView4NET" Version="*" Remove />
<!-- Add IronPDF -->
<PackageReference Include="IronPdf" Version="2024.*" /><!-- Remove PDFView4NET -->
<PackageReference Include="O2S.Components.PDFView4NET" Version="*" Remove />
<!-- Add IronPDF -->
<PackageReference Include="IronPdf" Version="2024.*" />或透過命令列介面:
dotnet remove package O2S.Components.PDFView4NET
dotnet add package IronPdfdotnet remove package O2S.Components.PDFView4NET
dotnet add package IronPdf許可證配置
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";完整 API 參考
命名空間變更
// Before: PDFView4NET
using O2S.Components.PDFView4NET;
using O2S.Components.PDFView4NET.HtmlToPdf;
using O2S.Components.PDFView4NET.Printing;
// After: IronPDF
using IronPdf;// Before: PDFView4NET
using O2S.Components.PDFView4NET;
using O2S.Components.PDFView4NET.HtmlToPdf;
using O2S.Components.PDFView4NET.Printing;
// After: IronPDF
using IronPdf;核心 API 映射
| PDFView4NET | IronPDF | 筆記 |
|---|---|---|
PDFFile.Open(path) | PdfDocument.FromFile(path) | 載入PDF |
PDFFile.Open(stream) | PdfDocument.FromStream(stream) | 從串流中載入 |
pdfFile.GetPage(index) | pdf.Pages[index] | 訪問頁面 |
pdfFile.PageCount | pdf.PageCount | 頁數 |
PDFPrintDocument | pdf.Print() | 列印 PDF |
pdfFile.Close() | pdf.Dispose() | 清理 |
HtmlToPdfConverter | ChromePdfRenderer | HTML 轉 PDF |
| 不適用 | PdfDocument.Merge() | 合併PDF |
| 不適用 | pdf.ApplyWatermark() | 添加浮水印 |
| 不適用 | pdf.SecuritySettings | 密碼保護 |
程式碼遷移範例
範例 1:URL 轉 PDF
之前(PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET
using O2S.Components.PDFView4NET;
using O2S.Components.PDFView4NET.HtmlToPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdfConverter converter = new HtmlToPdfConverter();
converter.NavigateUri = new Uri("https://example.com");
converter.ConvertHtmlToPdf();
converter.SavePdf("output.pdf");
}
}// NuGet: Install-Package O2S.Components.PDFView4NET
using O2S.Components.PDFView4NET;
using O2S.Components.PDFView4NET.HtmlToPdf;
using System;
class Program
{
static void Main()
{
HtmlToPdfConverter converter = new HtmlToPdfConverter();
converter.NavigateUri = new Uri("https://example.com");
converter.ConvertHtmlToPdf();
converter.SavePdf("output.pdf");
}
}(IronPDF 之後):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}PDFView4NET 使用HtmlToPdfConverter ,並將NavigateUri屬性設為Uri對象,然後呼叫ConvertHtmlToPdf() ,再SavePdf() 。 IronPDF 將其簡化為一個帶有RenderUrlAsPdf()的ChromePdfRenderer ,它直接接受一個字串 URL,傳回一個PdfDocument ,您可以使用SaveAs()來儲存它。 IronPDF 的方法提供了更簡潔的語法和與現代 .NET 應用程式更好的整合。 請參閱HTML 轉 PDF 文件以取得完整範例。
範例 2:HTML 字串到 PDF 的轉換
之前(PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET
using O2S.Components.PDFView4NET;
using O2S.Components.PDFView4NET.HtmlToPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
HtmlToPdfConverter converter = new HtmlToPdfConverter();
converter.HtmlContent = htmlContent;
converter.ConvertHtmlToPdf();
converter.SavePdf("document.pdf");
}
}// NuGet: Install-Package O2S.Components.PDFView4NET
using O2S.Components.PDFView4NET;
using O2S.Components.PDFView4NET.HtmlToPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
HtmlToPdfConverter converter = new HtmlToPdfConverter();
converter.HtmlContent = htmlContent;
converter.ConvertHtmlToPdf();
converter.SavePdf("document.pdf");
}
}(IronPDF 之後):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}PDFView4NET 使用HtmlContent屬性設定 HTML 字串,然後需要呼叫ConvertHtmlToPdf()再呼叫SavePdf() 。 IronPDF 提供了一個更流暢的 API,其中RenderHtmlAsPdf()直接接受 HTML 字串並傳回一個PdfDocument 。 方法名稱更直觀: RenderHtmlAsPdf與ConvertHtmlToPdf 。 了解更多信息,請閱讀我們的教程。
範例 3:從 PDF 中提取文本
之前(PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument(fs);
string text = "";
for (int i = 0; i < document.Pages.Count; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
}
}
}// NuGet: Install-Package O2S.Components.PDFView4NET
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument(fs);
string text = "";
for (int i = 0; i < document.Pages.Count; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
}
}
}(IronPDF 之後):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}這個例子突顯了 API 的一個顯著差異。 PDFView4NET 需要手動建立一個FileStream ,使用該流實例化PDFDocument ,然後循環遍歷document.Pages.Count並對每一頁連接Pages[i].ExtractText() 。
IronPDF 大大簡化了這個過程: PdfDocument.FromFile()直接從路徑載入 PDF,而ExtractAllText()在一次方法呼叫中從所有頁面提取文字。 無需手動流管理,無需循環,無需字串連接——只需兩行程式碼。
關鍵遷移說明
轉換器類別更改
PDFView4NET 使用HtmlToPdfConverter ; IronPDF 使用ChromePdfRenderer :
// PDFView4NET
HtmlToPdfConverter converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();// PDFView4NET
HtmlToPdfConverter converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();基於屬性的 API 與基於方法的 API
PDFView4NET 在轉換前設定屬性:
// PDFView4NET: Set properties, then convert
converter.HtmlContent = htmlContent;
converter.NavigateUri = new Uri(url);
converter.ConvertHtmlToPdf();
converter.SavePdf("output.pdf");
// IronPDF: Method parameters with fluent API
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");// PDFView4NET: Set properties, then convert
converter.HtmlContent = htmlContent;
converter.NavigateUri = new Uri(url);
converter.ConvertHtmlToPdf();
converter.SavePdf("output.pdf");
// IronPDF: Method parameters with fluent API
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");文件載入變更
// PDFView4NET: Requires FileStream
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument(fs);
}
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");// PDFView4NET: Requires FileStream
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument(fs);
}
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");頁面存取權限變更
// PDFView4NET: document.Pages.Count and Pages[i]
for (int i = 0; i < document.Pages.Count; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);// PDFView4NET: document.Pages.Count and Pages[i]
for (int i = 0; i < document.Pages.Count; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);儲存方法更改
// PDFView4NET: SavePdf()
converter.SavePdf("output.pdf");
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");// PDFView4NET: SavePdf()
converter.SavePdf("output.pdf");
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");遷移後的新功能
遷移到 IronPDF 後,您將獲得 PDFView4NET 無法提供的功能:
PDF合併
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");帶有 HTML 的浮水印
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");密碼保護
var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");表格填寫
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("FirstName").Value = "John";
pdf.Form.GetFieldByName("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.GetFieldByName("FirstName").Value = "John";
pdf.Form.GetFieldByName("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");伺服器端處理
PDFView4NET 無法在伺服器環境下運作。 IronPDF在這方面表現優異:
// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}功能對比總結
| 特徵 | PDFView4NET | IronPDF |
|---|---|---|
| 查看PDF文件 | 是的(使用者介面) | 否(使用檢視器) |
| 載入PDF文件 | 是的 | 是的 |
| 儲存PDF文件 | 有限的 | 是的 |
| HTML 轉 PDF | 不 | 是的 |
| PDF檔案的URL | 不 | 是的 |
| 合併PDF | 不 | 是的 |
| 拆分PDF | 有限的 | 是的 |
| 水印 | 不 | 是的 |
| 頁首/頁尾 | 不 | 是的 |
| 密碼保護 | 不 | 是的 |
| 數位簽名 | 不 | 是的 |
| 文字擷取 | 有限的 | 是的 |
| 填寫表格 | 有限的 | 是的 |
| WinForms | 是的 | 是的 |
| WPF | 是的 | 是的 |
| 安慰 | 有限的 | 是的 |
| ASP.NET | 不 | 是的 |
| Azure | 不 | 是的 |
| Docker | 不 | 是的 |
遷移清單
遷移前
- 確定查看需求(確定 IronPDF 的功能是否可以取代基於 UI 的 PDF 檢視方式)
- 文件列印工作流程
- 列出 PDF 處理需求
- 如有需要,可更換計劃檢視器(IronPDF 主要專注於生成/操作)
- 從ironpdf.com取得 IronPDF 許可證金鑰
軟體包變更
- 刪除
O2S.Components.PDFView4NETNuGet 套件 安裝IronPdfNuGet 套件:dotnet add package IronPdf
程式碼更改
- 更新命名空間導入(
using O2S.Components.PDFView4NET;→using IronPdf;) - 將
HtmlToPdfConverter替換為ChromePdfRenderer - 將
converter.HtmlContent+ConvertHtmlToPdf()替換為renderer.RenderHtmlAsPdf(html) - 將
converter.NavigateUri+ConvertHtmlToPdf()替換為renderer.RenderUrlAsPdf(url) - 將
converter.SavePdf()替換為pdf.SaveAs() - 將
PDFDocument(stream)替換為PdfDocument.FromFile(path) - 將手動頁面循環提取替換為
pdf.ExtractAllText() - 在應用程式啟動時新增許可證初始化
移民後
- 測試 PDF 載入和儲存
- 驗證文字擷取功能
- 測試 HTML 到 PDF 的轉換
- 驗證伺服器部署是否正常運作(新增功能)
- 如有需要,請進行跨平台測試(新增功能)
- 如果僅伺服器端,則移除特定於使用者介面的 PDF 程式碼






