跳至頁尾內容
影片

在 ASP.NET Core MVC 中使用 IronPDF 將 CSHTML 轉換為 PDF

從PDFView4NET遷移到IronPDF將您的PDF工作流程從WinForms/WPF查看元件轉變為無頭的PDF生成和操作程式庫。 本指南提供逐步遷移路徑,可實現伺服器端處理、Web應用程式支援以及超出PDFView4NET的查看/渲染/列印範圍的更廣泛PDF生命週期管理。

為什麼從PDFView4NET遷移到IronPDF

了解PDFView4NET

PDFView4NET(O2 Solutions,o2sol.com)是一個適用於WinForms和WPF應用程式的查看/渲染/列印工具包。 它以兩個NuGet封裝形式提供——O2S.Components.PDFView4NET.WPF——並包括其自己的PDF渲染引擎。O2 Solutions出售一個單獨的程式庫PDF4NET用於程式化生成/操作; 本指南僅涵蓋PDFView4NET。

需要生成PDF、HTML轉PDF渲染或伺服器端工作流的團隊通常會將PDFView4NET與其他程式庫搭配使用,或直接遷移到像IronPDF這樣的工具包,涵蓋生成和操作以及無頭部署場景。

查看 / 渲染 / 列印範圍

PDFView4NET圍繞顯示、渲染和列印PDF以及註釋和表單填寫構建。 遷移的常見原因:

  1. 著重查看/渲染/列印:PDFView4NET載入現有PDF以供顯示、列印或圖像渲染。 它不會從HTML或URL生成PDF。

  2. UI框架依賴性:以WinForms和WPF版本分發; 兩者都針對Windows桌面,這限制了在控制台工作者或伺服器端主機上的使用。

  3. 無HTML轉PDF:O2S.Components.PDFView4NET中不存在。

  4. 操作有限:操作集中在註釋和表單欄位上,而不是完整內容創作。

  5. 無Linux/Docker/伺服器路徑:該工具包僅通過WinForms/WPF支援Windows,並不設計用於Linux上的ASP.NET主機或容器工作負載。

  6. 活躍,但範圍狹隘:O2 Solutions仍然提供版本; 產品得到維護,但其範圍有意地狹窄。

PDFView4NET與IronPDF比較

功能 PDFView4NET IronPDF
主要重點 PDF查看 完整PDF解決方案(建立、查看、編輯)
需要UI框架 WinForms,WPF None
PDF建立
PDF 操作 有限(註釋)
伺服器端 不支持 完全支援
Web應用程式
控制台應用程式 有限 完全支援
Azure/Docker
HTML 到 PDF
跨平台環境
整合便利性

IronPDF涵蓋PDF的建立、操作和渲染,超越PDFView4NET的查看/渲染/列印範圍,解決超出查看/渲染/列印範圍的需求。

IronPDF還是與環境無關的——它可以運行在Windows、Linux、macOS、Docker和Azure上的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包變更


<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />

<PackageReference Include="IronPdf" Version="*" />

<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />

<PackageReference Include="IronPdf" Version="*" />
XML

或透過CLI:

dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPF edition)
dotnet add package IronPdf
dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPF edition)
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";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

完整API參考

名稱空間變更

// Before: PDFView4NET
using O2S.Components.PDFView4NET;

// After: IronPDF
using IronPdf;
// Before: PDFView4NET
using O2S.Components.PDFView4NET;

// After: IronPDF
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

核心API對應

PDFView4NET IronPDF
new PDFDocument(); doc.Load(path) PdfDocument.FromFile(path)
new PDFDocument(); doc.Load(stream) PdfDocument.FromStream(stream)
document.Pages[index] pdf.Pages[index]
document.PageCount pdf.PageCount
document.Print(...) pdf.Print()
document.Close() pdf.Dispose()
在PDFView4NET中不可用 ChromePdfRenderer (HTML轉PDF)
在PDFView4NET中不可用 PdfDocument.Merge()
在PDFView4NET中不可用 pdf.ApplyWatermark()
document.SecurityManager pdf.SecuritySettings

程式碼遷移範例

範例1:URL轉PDF

之前(PDFView4NET):

// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;

class Program
{
    static void Main()
    {
        // PDFView4NET cannot fetch a URL and emit a PDF; it can only consume one.
        PDFDocument document = new PDFDocument();
        document.Load("input.pdf");
        Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
        document.Close();
    }
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;

class Program
{
    static void Main()
    {
        // PDFView4NET cannot fetch a URL and emit a PDF; it can only consume one.
        PDFDocument document = new PDFDocument();
        document.Load("input.pdf");
        Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
        document.Close();
    }
}
Imports O2S.Components.PDFView4NET
Imports System

Class Program
    Shared Sub Main()
        ' PDFView4NET cannot fetch a URL and emit a PDF; it can only consume one.
        Dim document As New PDFDocument()
        document.Load("input.pdf")
        Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.")
        document.Close()
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PDFView4NET沒有HTML/URL渲染介面——O2S.Components.PDFView4NET中不存在,因此URL必須先通過其他工具渲染為PDF,然後載入以供查看/列印。 IronPDF使用單一SaveAs() save。 查看更多HTML到PDF文件以獲得完整的範例。

範例2:HTML字串轉PDF

之前(PDFView4NET):

// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;

class Program
{
    static void Main()
    {
        // The HTML string cannot be rendered by PDFView4NET. Assume an upstream
        // tool produced "document.pdf"; PDFView4NET can then display or print it.
        PDFDocument document = new PDFDocument();
        document.Load("document.pdf");
        Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
        document.Close();
    }
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;

class Program
{
    static void Main()
    {
        // The HTML string cannot be rendered by PDFView4NET. Assume an upstream
        // tool produced "document.pdf"; PDFView4NET can then display or print it.
        PDFDocument document = new PDFDocument();
        document.Load("document.pdf");
        Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
        document.Close();
    }
}
Imports O2S.Components.PDFView4NET
Imports System

Class Program
    Shared Sub Main()
        ' The HTML string cannot be rendered by PDFView4NET. Assume an upstream
        ' tool produced "document.pdf"; PDFView4NET can then display or print it.
        Dim document As New PDFDocument()
        document.Load("document.pdf")
        Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).")
        document.Close()
    End Sub
End Class
$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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
        pdf.SaveAs("document.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

O2S.Components.PDFView4NET中不存在,因此HTML字串必須先作為PDF產出然後載入到查看器中。 IronPDF直接通過PdfDocument。 在我們的教程中了解更多。

範例3:從PDF中提取文字

之前(PDFView4NET):

// NuGet: Install-Package O2S.Components.PDFView4NET.Win
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();
            document.Load(fs);
            string text = "";
            for (int i = 0; i < document.PageCount; i++)
            {
                text += document.Pages[i].ExtractText();
            }
            Console.WriteLine(text);
            document.Close();
        }
    }
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
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();
            document.Load(fs);
            string text = "";
            for (int i = 0; i < document.PageCount; i++)
            {
                text += document.Pages[i].ExtractText();
            }
            Console.WriteLine(text);
            document.Close();
        }
    }
}
Imports O2S.Components.PDFView4NET
Imports System
Imports System.IO

Class Program
    Shared Sub Main()
        Using fs As FileStream = File.OpenRead("document.pdf")
            Dim document As New PDFDocument()
            document.Load(fs)
            Dim text As String = ""
            For i As Integer = 0 To document.PageCount - 1
                text &= document.Pages(i).ExtractText()
            Next
            Console.WriteLine(text)
            document.Close()
        End Using
    End Sub
End Class
$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);
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("document.pdf")
        Dim text As String = pdf.ExtractAllText()
        Console.WriteLine(text)
    End Sub
End Class
$vbLabelText   $csharpLabel

此範例突顯出顯著的API差異。 PDFView4NET需要建立一個Pages[i].ExtractText()以獲得每頁內容。

IronPDF大幅簡化這一過程:ExtractAllText()從所有頁面提取文字,僅需一次方法呼叫。 無需手動流管理,無需迴圈,無需字串連接——只需兩行程式碼。


關鍵遷移注意事項

HTML渲染介面

PDFView4NET沒有HTML轉PDF API。 IronPDF引入ChromePdfRenderer用於HTML/URL輸入:

// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' or: renderer.RenderUrlAsPdf(url)
pdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

文件載入更改

// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");

// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");

// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
' PDFView4NET: instantiate then Load(path) or Load(stream)
Dim document As New PDFDocument()
document.Load("document.pdf")

' IronPDF: Direct file path
Dim pdf = PdfDocument.FromFile("document.pdf")
$vbLabelText   $csharpLabel

頁面存取變更

// PDFView4NET: document.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; 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.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; i++)
{
    document.Pages[i].ExtractText();
}

// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);
Imports PDFView4NET
Imports IronPDF

' PDFView4NET: document.PageCount and document.Pages(i)
For i As Integer = 0 To document.PageCount - 1
    document.Pages(i).ExtractText()
Next

' IronPDF: pdf.PageCount and Pages(i) or ExtractAllText()
Dim text As String = pdf.ExtractAllText()
' Or per-page: pdf.ExtractTextFromPage(0)
$vbLabelText   $csharpLabel

保存方法更改

// PDFView4NET has no save-from-HTML path; saving applies after edits on a loaded document.
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
// PDFView4NET has no save-from-HTML path; saving applies after edits on a loaded document.
// 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");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim 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");
Dim 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");
Dim 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.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.FindFormField("FirstName").Value = "John"
pdf.Form.FindFormField("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");
}
<HttpGet>
Public Function GeneratePdf() As IActionResult
    Dim renderer As New ChromePdfRenderer()
    Dim pdf = renderer.RenderHtmlAsPdf(GetReportHtml())
    Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
$vbLabelText   $csharpLabel

功能比較總結

功能 PDFView4NET IronPDF
查看PDF 是(UI) 否(用查看器)
載入PDF
保存PDF 有限
HTML轉PDF
URL到PDF
合併PDF
拆分PDF 有限
浮水印
頁眉/頁腳
密碼保護
數位簽名
文字提取 有限
填寫表單 有限
WinForms
WPF
控制台 有限
ASP.NET
Azure
Docker

遷移檢查表

遷移前

  • 確定查看需求(確定IronPDF的功能是否可以替代基於UI的PDF查看)
  • 文件列印工作流
  • 列出PDF操作需求
  • 視需要計劃查看器替換(IronPDF專注於生成/操作)
  • 獲取IronPDF授權金鑰來自ironpdf.com

套件變更

  • 移除.WPF)NuGet包
  • 安裝dotnet add package IronPdf

程式碼變更

  • 更新名稱空間導入(using O2S.Components.PDFView4NET;using IronPdf;
  • 引入ChromePdfRenderer用於所有HTML或URL輸入(無PDFView4NET等效項)
  • 替換new PDFDocument(); document.Load(path) with PdfDocument.FromFile(path)
  • 替換new PDFDocument(); document.Load(stream) with PdfDocument.FromStream(stream)
  • 替換手動for (int i = 0; i < document.PageCount; i++) (or pdf.ExtractTextFromPage(i)
  • using區塊)
  • 在應用程式啟動時新增授權初始化

遷移後

  • 測試PDF載入和保存
  • 驗證文字提取功能
  • 測試 HTML 到 PDF 的轉換
  • 驗證伺服器部署是否正常工作(新功能)
  • 視需要測試跨平台(新功能)
  • 如果僅伺服器,移除UI特定的PDF程式碼

請注意PDFView4NET是其相應所有者的註冊商標。 此網站與O2 Solutions無關、未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話