比较

PdfiumViewer 与 IronPDF:技术比较指南

PDFViewer vs IronPdf:PDF 查看器与 .NET 中的完整 PDF 解决方案

当.NET 开发人员需要在 Windows 窗体应用程序中使用 PDF 功能时,他们经常会遇到 PdfiumViewer--Google 的 PDFium 渲染引擎的 .NET 封装器。本比较将对PdfiumViewer和IronPDF进行研究,分析它们的架构差异、功能完整性以及是否适合现代应用程序的要求。

什么是 PdfiumViewer? PdfiumViewer 是 PDFium 的 .NET 封装程序,PDFium 是 Google Chrome 浏览器中使用的 PDF 渲染引擎。 该库提供专为 Windows 窗体应用程序设计的高性能 PDF 渲染功能,提供可直接嵌入 WinForms 界面的 `PdfViewer` 控件。 PdfiumViewer 根据 Apache 2.0 许可发布,提供经济高效的 PDF 查看功能。 但是,其范围从根本上仅限于查看和渲染--库不能创建、编辑或操作 PDF 文档。 此外,PdfiumViewer 面临着不确定的维护状态,这给需要长期支持的生产应用程序带来了风险。 PdfiumViewer 的主要特点包括 - **仅限查看**:专为显示 PDF 内容而设计 - **Windows 窗体专用**:仅限于 WinForms 应用程序 - **开源**:Apache 2.0 许可,无许可费用 - **本地二进制依赖性**:需要特定平台的 PDFium 二进制文件 (x86/x64) - **不确定的维护**:更新有限,长期支持不明确

什么是 IronPDF? [IronPDF](https://ironpdf.com/) 是一个全面的 .NET 库,提供完整的 PDF 生命周期管理。 [ChromePdfRenderer](https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderer.html) 类使用基于 Chromium 的现代引擎从 HTML、CSS 和 JavaScript 创建 PDF,而 `PdfDocument` 类提供了广泛的操作和提取功能。 IronPdf 与PdfiumViewer仅关注查看功能不同,IronPDF 可处理 PDF 创建、文本提取、操作、合并、水印和安全等功能,所有这些功能都集中在一个库中。 该库适用于控制台、Web 和桌面应用程序,远远超出了 Windows 窗体的限制。 ## 架构比较 PdfiumViewer 和IronPDF的根本区别在于它们的适用范围:纯查看与完整的 PDF 解决方案。 |方面|PdfiumViewer|IronPDF| |--------|--------------|---------| |**主要关注点**|WinForms PDF 查看器|完整的 PDF 解决方案| |**PDF 创建**|✗|✓ (HTML、URL、图片)| |**文本提取**|✗|✓| |**PDF 操作**|✗|✓(合并、拆分、编辑)| |**内置浏览器**|✓|✗(侧重于后端)| |**平台支持**|仅限 Windows 窗体|控制台、网络、桌面| |**框架支持**|.NET Framework|.NET Framework, Core, 5+| |**维护**|不确定|活跃| 对于只需要在 Windows 窗体中查看 PDF 的应用程序,使用PdfiumViewer即可。对于需要 PDF 生成、文本提取或任何创建功能的应用程序,IronPDF 可提供完整的解决方案。 ## HTML 至 PDF 转换 HTML 到 PDF 的转换展示了这些库之间的基本能力差距。 **PdfiumViewer HTML 转 PDF 方法:** ```csharp // NuGet: Install-Package PdfiumViewer using PdfiumViewer; using System.IO; using System.Drawing.Printing; // PDFiumViewer is primarily a PDF viewer/renderer, not a generator // It cannot directly convert HTML to PDF // You would need to use another library to first create the PDF // Then use PDFiumViewer to display it: string htmlContent = "

Hello World

This is a test document.

"; // This functionality is NOT available in PDFiumViewer // You would need a different library like wkhtmltopdf or similar // PDFiumViewer can only open and display existing PDFs: string existingPdfPath = "output.pdf"; using (var document = PdfDocument.Load(existingPdfPath)) { // Can only render/display existing PDF var image = document.Render(0, 300, 300, true); } ``` **IronPDF HTML 转 PDF 方法:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; string htmlContent = "

Hello World

This is a test document.

"; // Create a PDF from HTML string var renderer = new ChromePdfRenderer(); PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent); // Save the PDF pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully!"); ``` PdfiumViewer 无法从 HTML 创建 PDF,因为它不支持此功能。 该库只能打开和显示现有的 PDF 文件。 需要[HTML到PDF转换](https://ironpdf.com/how-to/html-file-to-pdf/)的应用程序需要将 IronPdfViewer 与其他库结合起来,从而产生复杂性和潜在的兼容性问题。 IronPdf 的 `ChromePdfRenderer` 使用现代 Chromium 引擎转换 HTML 内容,完全支持 CSS3、Flexbox、网格和 JavaScript 执行,可从网页内容生成高保真 PDF 输出。 ## 文本提取 文本提取是这些库之间的另一个重大能力差距。 **PdfiumViewer 文本提取方法:** ```csharp // NuGet: Install-Package PdfiumViewer using PdfiumViewer; using System; using System.Text; string pdfPath = "document.pdf"; // PDFiumViewer has limited text extraction capabilities // It's primarily designed for rendering, not text extraction using (var document = PdfDocument.Load(pdfPath)) { int pageCount = document.PageCount; Console.WriteLine($"Total pages: {pageCount}"); // PDFiumViewer does not have built-in text extraction // You would need to use OCR or another library // It can only render pages as images for (int i = 0; i < pageCount; i++) { var pageImage = document.Render(i, 96, 96, false); Console.WriteLine($"Rendered page {i + 1}"); } } ``` **IronPDF 文本提取方法:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; string pdfPath = "document.pdf"; // Open and extract text from PDF PdfDocument pdf = PdfDocument.FromFile(pdfPath); // Extract text from all pages string allText = pdf.ExtractAllText(); Console.WriteLine("Extracted Text:"); Console.WriteLine(allText); // Extract text from specific page string pageText = pdf.ExtractTextFromPage(0); Console.WriteLine($"\nFirst page text: {pageText}"); Console.WriteLine($"\nTotal pages: {pdf.PageCount}"); ``` PdfiumViewer 主要用于渲染,而非文本提取。 文档明确指出它 "没有内置文本提取功能",您需要使用 OCR 或其他库。 该库只能将页面渲染为图像。 IronPdf 的 `ExtractAllText()` 方法可通过一次调用提取所有页面中的所有文本。 如需更精细的控制,`ExtractTextFromPage()` 可提供特定页面的文本。 这种本地文本提取功能无需使用 OCR 或其他库。 ## PDF 到图像的转换 PDF 到图像的渲染是PdfiumViewer的一个优势领域,这也是它作为渲染引擎的主要优势。 **PdfiumViewer PDF 转图像方法:** ```csharp // NuGet: Install-Package PdfiumViewer using PdfiumViewer; using System; using System.Drawing; using System.Drawing.Imaging; string pdfPath = "document.pdf"; string outputImage = "page1.png"; // PDFiumViewer excels at rendering PDFs to images using (var document = PdfDocument.Load(pdfPath)) { // Render first page at 300 DPI int dpi = 300; using (var image = document.Render(0, dpi, dpi, true)) { // Save as PNG image.Save(outputImage, ImageFormat.Png); Console.WriteLine($"Page rendered to {outputImage}"); } // Render all pages for (int i = 0; i < document.PageCount; i++) { using (var pageImage = document.Render(i, 150, 150, true)) { pageImage.Save($"page_{i + 1}.png", ImageFormat.Png); } } } ``` **IronPDF PDF 转图像方法:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; using System.Linq; string pdfPath = "document.pdf"; string outputImage = "page1.png"; // Open PDF and convert to images PdfDocument pdf = PdfDocument.FromFile(pdfPath); // Convert first page to image var firstPageImage = pdf.ToBitmap(0); firstPageImage[0].Save(outputImage); Console.WriteLine($"Page rendered to {outputImage}"); // Convert all pages to images var allPageImages = pdf.ToBitmap(); for (int i = 0; i < allPageImages.Length; i++) { allPageImages[i].Save($"page_{i + 1}.png"); Console.WriteLine($"Saved page {i + 1}"); } Console.WriteLine($"Total pages converted: {pdf.PageCount}"); ``` PdfiumViewer 的 `Render()` 方法提供基于 DPI 的渲染,可对输出质量进行精细控制。 该方法需要使用嵌套 `using` 语句的手动处理模式。 IronPdf 的 `ToBitmap()` 方法提供了更简单的 API,可返回可保存或处理的位图数组。 尽管 API 模式不同,但这两个库都能有效地完成这项任务。 ## API 映射参考 对于考虑将PdfiumViewer移植到IronPDF的团队,了解 API 映射有助于估算工作量。 ### 文档加载 |PdfiumViewer|IronPDF|备注| |--------------|---------|-------| |<代码>PdfDocument.Load(path)PdfDocument.FromFile(路径)PdfDocument.Load(stream)PdfDocument.FromStream(流)document.PageCountdocument.PageCountdocument.PageSizes[index]document.Pages[index].Width/Heightdocument.Render(index, dpiX, dpiY, flag)pdf.ToBitmap(index)pdf.RasterizeToImageFiles(path, dpi)ChromePdfRenderer.RenderHtmlAsPdf()ChromePdfRenderer.RenderUrlAsPdf()pdf.ExtractAllText()pdf.ExtractTextFromPage(index)PdfDocument.Merge()pdf.ApplyWatermark()pdf.SecuritySettingsInstall-Package IronPdf