迁移指南 如何用 C# 从 PDFView4NET 迁移到 IronPDF Curtis Chau 已发布:2026年2月1日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从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.*" /> 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"; $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 映射 PDFView4NET IronPDF 备注 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"); } } $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"); } } $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 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"); } } $vbLabelText $csharpLabel 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); } } } $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); } } $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 功能对比摘要 特征 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.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 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何用 C# 从 PeachPDF 迁移到 IronPDF如何用 C# 从 PDFSharp 迁移到...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多