跳至页脚内容
迁移指南

如何用 C# 从 PDFView4NET 迁移到 IronPDF

从PDFView4NET迁移到 IronPdf:完整的 C# 迁移指南

从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。

2.用户界面框架依赖性:需要WinForms或WPF上下文。 对WinForms或WPF环境的要求可能会限制在其他环境中的使用,如控制台应用程序或网络服务,PDFView4NET 不支持这些环境。

3.不能将 HTML 转换为 PDF:不能将 HTML 或 URL 转换为 PDF。 该库严格侧重于查看,没有创建或操作 PDF 文件的内置功能。

4.有限操作:与IronPDF的完整功能集相比,只能进行基本编辑。

5.无服务器端支持:无法在 Web 服务或天域功能中运行。

6.传统技术:开发活动较少,功能更新较新。

PDFView4NET与IronPDF对比

特征PDFView4NETIronPDF
主要关注点查看 PDF完整的 PDF 解决方案(创建、查看、编辑)
需要使用用户界面框架WinForms、WPF
PDF 创建
PDF 操作有限(注释)
服务器端不支持全面支持
网络应用
控制台应用程序有限的全面支持
Azure/Docker
HTML 到 PDF
跨平台语境
易于集成语言高的

IronPdf 凭借其多功能性和全面的功能集脱颖而出,对于需要用 C# 处理 PDF 的整体方法的开发人员来说尤其具有吸引力。 该库支持 PDF 创建、查看、编辑等功能,解决的用例远远超出了PDFView4NET的查看功能。

对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了上下文独立性--它可以在不同的上下文中使用,包括网络应用程序、服务和控制台应用程序。 这种灵活性对于需要跨平台支持和不同部署场景的项目至关重要。


开始之前

前提条件

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 软件包变更

<!-- RemovePDFView4NET-->
<PackageReference Include="O2S.Components.PDFView4NET" Version="*" Remove />

<!-- AddIronPDF-->
<PackageReference Include="IronPdf" Version="2024.*" />
<!-- RemovePDFView4NET-->
<PackageReference Include="O2S.Components.PDFView4NET" Version="*" Remove />

<!-- AddIronPDF-->
<PackageReference Include="IronPdf" Version="2024.*" />
XML

或通过 CLI:

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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

核心 API 映射

PDFView4NETIronPDF备注
<代码>PDFFile.Open(path)</代码<代码>PdfDocument.FromFile(路径)</代码加载 PDF
<代码>PDFFile.Open(stream)</代码<代码>PdfDocument.FromStream(流)</代码从流加载
<代码>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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$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");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

功能对比摘要

特征PDFView4NETIronPDF
查看 PDF是(用户界面)否(使用查看器)
加载 PDF
保存 PDF有限的
HTML 至 PDF
URL 至 PDF
合并 PDF
拆分 PDF有限的
水印
页眉/页脚
密码保护
数字签名
文本提取有限的
填写表格有限的
WinForms
WPF
控制台有限的
ASP.NET
天域
多克

迁移清单

迁移前

  • [ ] 确定查看需求(确定IronPDF的功能是否可以取代基于 UI 的 PDF 查看功能)
  • [文档打印工作流程
  • [ ] 列出 PDF 操作需求
  • [ ] 如果需要,计划更换查看器(IronPDF 专注于生成/操作)
  • [ ] 从 ironpdf.com 获取IronPDF许可证密钥

软件包变更

  • [ ] 删除 O2S.Components.PDFView4NET NuGet 软件包
  • [ ] 安装 IronPDF NuGet 软件包:<代码>dotnet 添加软件包 IronPdf

代码更改

  • [ ] 更新命名空间导入(使用 O2S.Components.PDFView4NET;使用 IronPDF;)
  • [ ] 将<代码>HtmlToPdfConverter</代码替换为 ChromePdfRenderer
  • [ ] 将 converter.HtmlContent + ConvertHtmlToPdf() 替换为 renderer.RenderHtmlAsPdf(html)
  • [ ] 将 converter.NavigateUri + ConvertHtmlToPdf() 替换为 renderer.RenderUrlAsPdf(url)
  • [ ] 将 converter.SavePdf() 替换为 pdf.SaveAs()
  • [ ] 将 PDFDocument(stream) 替换为<代码>PdfDocument.FromFile(路径)</代码。
  • [ ] 使用 pdf.ExtractAllText() 替换手动页面循环提取。
  • [ ] 在应用程序启动时添加许可证初始化

后迁移

  • [ ] 测试 PDF 的加载和保存
  • [ ] 验证文本提取功能
  • [ ] 测试 HTML 到 PDF 的转换
  • [ ] 验证服务器部署是否正常(新功能)
  • [ ] 需要时进行跨平台测试(新功能)
  • [如果仅用于服务器,则删除特定于用户界面的 PDF 代码

结论

虽然PDFView4NET仍然是开发人员在使用WinForms或WPF的 C# 桌面应用程序中查看 PDF 的理想选择,但由于其在更广泛的 PDF 功能方面存在局限性,可能需要IronPDF等替代工具。IronPDF在多功能性方面表现出色,通过直观的 API 和全面的支持,可满足多种情况下的复杂 PDF 操作。

本次迁移的主要变化有 1.架构:用户界面查看组件 → 完整的 PDF 生命周期库 2.转换器类:<代码>HtmlToPdfConverter</代码> → <代码>ChromePdfRenderer</代码 3.HTML 转换:<代码>HtmlContent</代码> + <代码>ConvertHtmlToPdf()</代码> → <代码>RenderHtmlAsPdf(html)</代码 4.URL转换:<代码>NavigateUri</代码> + <代码>ConvertHtmlToPdf()</代码> → <代码>RenderUrlAsPdf(url)</代码 5.文档加载PDFDocument(stream)PdfDocument.FromFile(path) 6.文本提取:手动页面循环 → ExtractAllText() 7.保存:<代码>SavePdf()</代码> → <代码>SaveAs()</代码 8.平台支持:仅限桌面 → 服务器、Web、控制台、Azure、Docker 9.新功能:PDF 合并、水印、安全性、表单填写等功能

考虑集成 PDF 的开发人员应评估其项目要求、预期增长和计划支持的环境,以选择最符合其需求的库。

探索完整的IronPDF文档教程示例,加速您的PDFView4NET迁移。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。