比较
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
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.PageCount代码|<代码>document.PageCount代码|相同| |<代码>document.PageSizes[index]代码|<代码>document.Pages[index].Width/Height代码|每页访问| ###>document.Render(index, dpiX, dpiY, flag)代码|<代码>pdf.ToBitmap(index)代码|页面到图片| |`document.Render(index,>pdf.RasterizeToImageFiles(path, dpi)代码|批量渲染| ###PdfiumViewer中不可用的功能 |IronPdf>ChromePdfRenderer.RenderHtmlAsPdf()代码|从>ChromePdfRenderer.RenderUrlAsPdf()代码|从>pdf.ExtractAllText()代码|提取所有文本| |<代码>pdf.ExtractTextFromPage(index)代码|从特定页面提取文本| |<代码>PdfDocument.Merge()代码|合并多个>pdf.ApplyWatermark()代码|添加水印| |<代码>pdf.SecuritySettings代码|密码保护| ##>Install-Package IronPdf代码 2.查看>