如何用 C# 从 PDFView4NET 迁移到 IronPDF
从PDFView4NET迁移到IronPDF可将您的 PDF 工作流程从注重 UI 的查看组件转变为全面的 PDF 生成和操作库。 本指南提供了完整的分步迁移路径,可实现服务器端处理、网络应用程序支持以及PDFView4NET无法提供的完整 PDF 生命周期管理功能。
为什么要从PDFView4NET迁移到 IronPDF.
了解 PDFView4NET。
PDFView4NET 是主要关注 C# 中 PDF 查看功能的开发人员的热门选择。PDFView4NET为 Windows 窗体 (WinForms) 和 Windows Presentation Foundation (WPF) 应用程序量身定制了强大的 PDF 查看控件。 该库强调提供无缝的 PDF 浏览体验,使其成为桌面应用程序开发的首选。
尽管PDFView4NET有其优势,但它也有局限性,这可能会促使开发人员探索更全面的库,如 IronPDF,它提供了一个一体化的 PDF 解决方案,包括创建、查看和操作功能,而不局限于特定的 UI 组件。
仅限查看的限制
PDFView4NET 主要是WinForms和WPF应用程序的用户界面查看组件。 翻译的重点是显示 PDF,而不是创建或操作 PDF。 迁移的主要原因:
1.仅查看限制:PDFView4NET仅用于查看,不用于创建 PDF。
- UI 框架依赖性:需要WinForms或WPF环境。 对WinForms或WPF环境的要求可能会限制在其他环境中的使用,如控制台应用程序或网络服务,PDFView4NET 不支持这些环境。
3.不支持 HTML 转 PDF:无法将 HTML 或 URL 转换为 PDF。 该库严格侧重于查看,没有创建或操作 PDF 文件的内置功能。
4.操作有限:与IronPDF的完整功能集相比,仅提供基本编辑功能。
5.不支持服务器端:无法在 Web 服务或天域Functions 中运行。
6.传统技术:开发活动较少,现代功能更新较少。
PDFView4NET与IronPDF对比
| 特征 | PDFView4NET | IronPDF |
|---|---|---|
| 主要关注点 | 查看 PDF | 完整的 PDF 解决方案(创建、查看、编辑) |
| 需要使用用户界面框架 | WinForms、WPF | 无 |
| PDF 创建 | 否 | 是 |
| PDF 操作 | 有限(注释) | 是 |
| 服务器端 | 不支持 | 全面支持 |
| 网络应用 | 否 | 是 |
| 控制台应用程序 | 有限的 | 全面支持 |
| Azure/Docker | 否 | 是 |
| HTML 到 PDF | 否 | 是 |
| 跨平台语境 | 否 | 是 |
| 易于集成 | 语言 | 高的 |
IronPDF 凭借其多功能性和全面的功能集脱颖而出,对于需要用 C# 处理 PDF 的整体方法的开发人员来说尤其具有吸引力。 该库支持 PDF 创建、查看、编辑等功能,解决的用例远远超出了PDFView4NET的查看功能。
对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了上下文独立性--它可以在不同的上下文中使用,包括网络应用程序、服务和控制台应用程序。 这种灵活性对于需要跨平台支持和不同部署场景的项目至关重要。
开始之前
前提条件
- .NET 环境: .NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 访问权限:能够安装 NuGet 包
- IronPDF 许可证:请从ironpdf.com获取您的许可证密钥。
NuGet 软件包变更
<PackageReference Include="O2S.Components.PDFView4NET" Version="*" Remove />
<PackageReference Include="IronPdf" Version="2024.*" />
<PackageReference Include="O2S.Components.PDFView4NET" Version="*" Remove />
<PackageReference Include="IronPdf" Version="2024.*" />
或通过 CLI:
dotnet remove package O2S.Components.PDFView4NET
dotnet add package IronPdf
dotnet 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";
' 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;
Imports IronPdf
核心 API 映射
| PDFView4NET | IronPDF |
|---|---|
PDFFile.Open(path) |
PdfDocument.FromFile(path) |
PDFFile.Open(stream) |
PdfDocument.FromStream(stream) |
pdfFile.GetPage(index) |
pdf.Pages[index] |
pdfFile.PageCount |
pdf.PageCount |
PDFPrintDocument |
pdf.Print() |
pdfFile.Close() |
pdf.Dispose() |
HtmlToPdfConverter |
ChromePdfRenderer |
| 不适用 | PdfDocument.Merge() |
| 不适用 | 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");
}
}
Imports O2S.Components.PDFView4NET
Imports O2S.Components.PDFView4NET.HtmlToPdf
Imports System
Class Program
Shared Sub Main()
Dim converter As New HtmlToPdfConverter()
converter.NavigateUri = New Uri("https://example.com")
converter.ConvertHtmlToPdf()
converter.SavePdf("output.pdf")
End Sub
End Class
After (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
PDFView4NET 使用 HtmlToPdfConverter,并将 NavigateUri 属性设置为 Uri 对象,然后调用 ConvertHtmlToPdf(),然后调用 SavePdf()。IronPDF将其简化为单个 ChromePdfRenderer,其中包含 RenderUrlAsPdf(),它直接接受字符串 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");
}
}
Imports O2S.Components.PDFView4NET
Imports O2S.Components.PDFView4NET.HtmlToPdf
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 converter As New HtmlToPdfConverter()
converter.HtmlContent = htmlContent
converter.ConvertHtmlToPdf()
converter.SavePdf("document.pdf")
End Sub
End Class
After (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
PDFView4NET 使用 HtmlContent 属性来设置 HTML 字符串,然后需要调用 ConvertHtmlToPdf(),接着调用 SavePdf()。IronPDF提供了一个更流畅的 API,它直接接受 HTML 字符串并返回一个 RenderHtmlAsPdf()。 方法名称更加直观: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);
}
}
}
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(fs)
Dim text As String = ""
For i As Integer = 0 To document.Pages.Count - 1
text &= document.Pages(i).ExtractText()
Next
Console.WriteLine(text)
End Using
End Sub
End Class
After (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
本例强调了 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();
' PDFView4NET
Dim converter As New HtmlToPdfConverter()
' IronPDF
Dim 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: Set properties, then convert
converter.HtmlContent = htmlContent
converter.NavigateUri = New Uri(url)
converter.ConvertHtmlToPdf()
converter.SavePdf("output.pdf")
' IronPDF: Method parameters with fluent API
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
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");
Imports System.IO
Imports PDFView4NET
Imports IronPDF
' PDFView4NET: Requires FileStream
Using fs As FileStream = File.OpenRead("document.pdf")
Dim document As New PDFDocument(fs)
End Using
' IronPDF: Direct file path
Dim 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: document.Pages.Count and Pages(i)
For i As Integer = 0 To document.Pages.Count - 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)
保存方法更改
// 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");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim 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");
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")
密码保护
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")
表格填写
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");
Dim 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");
}
<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
功能对比摘要
| 特征 | PDFView4NET | IronPDF |
|---|---|---|
| 查看 PDF | 是(用户界面) | 否(使用查看器) |
| 加载 PDF | 是 | 是 |
| 保存 PDF | 有限的 | 是 |
| HTML 至 PDF | 否 | 是 |
| URL 至 PDF | 否 | 是 |
| 合并 PDF | 否 | 是 |
| 拆分 PDF | 有限的 | 是 |
| 水印 | 否 | 是 |
| 页眉/页脚 | 否 | 是 |
| 密码保护 | 否 | 是 |
| 数字签名 | 否 | 是 |
| 文本提取 | 有限的 | 是 |
| 填写表格 | 有限的 | 是 |
| WinForms | 是 | 是 |
| WPF | 是 | 是 |
| 控制台 | 有限的 | 是 |
| ASP.NET | 否 | 是 |
| 天域 | 否 | 是 |
| 多克 | 否 | 是 |
迁移清单
迁移前
- 确定查看需求(确定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 代码

