跳至頁尾內容
移民指南

如何在 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。

  1. UI 框架依賴性:需要 WinForms 或 WPF 環境。 對 WinForms 或 WPF 環境的要求可能會限制其在其他上下文中的使用,例如控制台應用程式或 Web 服務,因為 PDFView4NET 不支援這些環境。

3.不支援 HTML 轉 PDF:無法將 HTML 或 URL 轉換為 PDF。 該庫嚴格專注於查看,沒有創建或操作 PDF 文件的內建功能。

4.操作有限:與 IronPDF 的完整功能集相比,僅提供基本編輯功能。

5.不支援伺服器端:無法在 Web 服務或 Azure Functions 中運作。

6.傳統技術:開發活動較少,現代功能更新較少。

PDFView4NET 與 IronPDF 的比較

特徵PDFView4NETIronPDF
主要關注點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 應用程式、服務和控制台應用程式。 這種靈活性對於需要跨平台支援和多樣化部署場景的專案至關重要。


開始之前

先決條件

  1. .NET 環境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 存取權限:能夠安裝 NuGet 套件
  3. 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.*" />
XML

或透過命令列介面:

dotnet remove package O2S.Components.PDFView4NET
dotnet add package IronPdf
dotnet remove package O2S.Components.PDFView4NET
dotnet add package IronPdf
SHELL

許可證配置

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

完整 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;
$vbLabelText   $csharpLabel

核心 API 映射

PDFView4NETIronPDF筆記
PDFFile.Open(path)PdfDocument.FromFile(path)載入PDF
PDFFile.Open(stream)PdfDocument.FromStream(stream)從串流中載入
pdfFile.GetPage(index)pdf.Pages[index]訪問頁面
pdfFile.PageCountpdf.PageCount頁數
PDFPrintDocumentpdf.Print()列印 PDF
pdfFile.Close()pdf.Dispose()清理
HtmlToPdfConverterChromePdfRendererHTML 轉 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");
    }
}
$vbLabelText   $csharpLabel

(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");
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
$vbLabelText   $csharpLabel

(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");
    }
}
$vbLabelText   $csharpLabel

PDFView4NET 使用HtmlContent屬性設定 HTML 字串,然後需要呼叫ConvertHtmlToPdf()再呼叫SavePdf() 。 IronPDF 提供了一個更流暢的 API,其中RenderHtmlAsPdf()直接接受 HTML 字串並傳回一個PdfDocument 。 方法名稱更直觀: RenderHtmlAsPdfConvertHtmlToPdf 。 了解更多信息,請閱讀我們的教程

範例 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);
        }
    }
}
$vbLabelText   $csharpLabel

(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);
    }
}
$vbLabelText   $csharpLabel

這個例子突顯了 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();
$vbLabelText   $csharpLabel

基於屬性的 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");
$vbLabelText   $csharpLabel

文件載入變更

// 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");
$vbLabelText   $csharpLabel

頁面存取權限變更

// 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);
$vbLabelText   $csharpLabel

儲存方法更改

// PDFView4NET: SavePdf()
converter.SavePdf("output.pdf");

// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
// PDFView4NET: SavePdf()
converter.SavePdf("output.pdf");

// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

遷移後的新功能

遷移到 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");
$vbLabelText   $csharpLabel

帶有 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");
$vbLabelText   $csharpLabel

密碼保護

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");
$vbLabelText   $csharpLabel

表格填寫

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");
$vbLabelText   $csharpLabel

伺服器端處理

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");
}
$vbLabelText   $csharpLabel

功能對比總結

特徵PDFView4NETIronPDF
查看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.PDFView4NET NuGet 套件 安裝IronPdf NuGet 套件: 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 程式碼

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。