我想使用 C# 以图形方式加载和绘制 pdf 文件。我不需要编辑它们或任何东西,只需以给定的缩放级别渲染它们。
我发现的 pdf 库似乎专注于生成。我该怎么做呢?
谢谢。
谷歌已经开源了它使用 Foxit Software 编写的优秀 PDF 渲染引擎 - PDFium 。
有一个名为PdfiumViewer的 C# nuget 包,它提供了一个围绕 PDFium 的 C# 包装器,并允许显示和打印 PDF。
我已经使用过它,并且对渲染的质量印象深刻。
PDFium 直接与流一起工作,因此不需要将任何数据写入磁盘。
这是我来自 WinForms 应用程序的示例
public void LoadPdf(byte[] pdfBytes)
{
var stream = new MemoryStream(pdfBytes);
LoadPdf(stream)
}
public void LoadPdf(Stream stream)
{
// Create PDF Document
var pdfDocument = PdfDocument.Load(stream);
// Load PDF Document into WinForms Control
pdfRenderer.Load(pdfDocument);
}
编辑:在 WinForm 中获取pdfRendererPdfiumViewer
控件:将NuGet 包添加到项目中;在 Windows 资源管理器中打开项目包文件夹并将PdfiumViewer.dll
文件拖到Toolbox
窗口上;一个名为的控件PdfRenderer
将可用于添加:
如果 Adobe ActiveX 不是您正在寻找的,还有其他一些选择(因为 Acrobat 必须存在于用户计算机上并且您不能自己发布)。
要创建 PDF 预览,请先查看 StackOverflow 上有关该主题的其他一些讨论:
在最后两个中,我谈到了一些你可以尝试的事情:
您可以获得商业渲染器(PDFViewForNet、PDFRasterizer.NET、ABCPDF、ActivePDF、XpdfRasterizer和其他答案中的其他...)。
不过大多数都相当昂贵,特别是如果您只关心制作简单的预览/缩略图。
除了 Omar Shahine 的代码片段外,还有一篇CodeProject 文章展示了如何使用 Adobe ActiveX,但它可能已经过时,很容易被新版本破坏并且其合法性模糊不清(基本上它可以供内部使用,但你可以'不发货,您不能在服务器上使用它来生成 PDF 图像)。
您可以查看SumatraPDF的源代码,这是一个适用于 Windows 的 OpenSource PDF 查看器。
还有Poppler,一个使用Xpdf作为渲染引擎的渲染引擎。所有这些都很棒,但它们需要相当多的承诺才能使它们工作并与 .Net 交互,并且它们往往是在 GPL 下分发的。
您可能需要考虑使用GhostScript作为解释器,因为渲染页面是一个相当简单的过程。
缺点是您需要重新打包它以将其与您的应用程序一起安装,或者使其成为先决条件(或至少是安装过程的一部分)。
这不是一个很大的挑战,而且肯定比不得不将其他渲染引擎与 .Net 合作更容易。
我做了一个小项目,你可以在Developer Express 论坛上找到它作为附件。
请注意 GhostScript 的许可证要求。
如果你不能离开,那么商业软件可能是你唯一的选择。
这是我对另一个问题的回答。
首先你需要参考 Adobe Reader ActiveX 控件
Adobe Acrobat 浏览器控件类型库 1.0
%programfiles&\Common Files\Adobe\Acrobat\ActiveX\AcroPDF.dll
然后,您只需将它从工具箱中拖到您的 Windows 窗体中。
并使用一些这样的代码来初始化 ActiveX 控件。
private void InitializeAdobe(string filePath)
{
try
{
this.axAcroPDF1.LoadFile(filePath);
this.axAcroPDF1.src = filePath;
this.axAcroPDF1.setShowToolbar(false);
this.axAcroPDF1.setView("FitH");
this.axAcroPDF1.setLayoutMode("SinglePage");
this.axAcroPDF1.Show();
}
catch (Exception ex)
{
throw;
}
}
确保当您的表单关闭时您处置 ActiveX 控件
this.axAcroPDF1.Dispose();
this.axAcroPDF1 = null;
否则 Acrobat 可能会被遗弃。
System.Drawing
PdfiumViewer 很棒,但与 WinForms 的耦合相对紧密。出于这个原因,我创建了自己的 PDFium 包装器:PDFiumSharp
页面可以呈现为PDFiumBitmap,而 PDFiumBitmap 又可以保存到磁盘或作为流公开。这样,任何能够从流中加载 BMP 格式图像的框架都可以使用这个库来显示 pdf 页面。
例如,在 WPF 应用程序中,您可以使用以下方法呈现 pdf 页面:
using System.Linq;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using PDFiumSharp;
static class PdfRenderer
{
public static ImageSource RenderPage(string filename, int pageIndex, string password = null, bool withTransparency = true)
{
using (var doc = new PdfDocument(filename, password))
{
var page = doc.Pages[pageIndex];
using (var bitmap = new PDFiumBitmap((int)page.Width, (int)page.Height, withTransparency))
{
page.Render(bitmap);
return new BmpBitmapDecoder(bitmap.AsBmpStream(), BitmapCreateOptions.None, BitmapCacheOption.OnLoad).Frames.First();
}
}
}
}
ABCpdf 将为您做这些和许多其他事情。
它不仅可以将您的 PDF 呈现为各种格式(例如 JPEG、GIF、PNG、TIFF、JPEG 2000;矢量 EPS、SVG、Flash 和 PostScript),而且还可以在各种颜色空间(例如灰色、 RGB、CMYK)和位深度(例如,每个分量 1、8、16 位)。
这只是它会做的一些事情!
有关更多详细信息,请参阅:
http://www.websupergoo.com/abcpdf-8.htm
哦,您可以通过免费许可证计划获得免费许可证。
使用 Acrobat 进行 PDF 呈现存在 EULA 问题。如果你想沿着这条路线走,首先要非常仔细地检查合法性。
使用 Web 浏览器控件。这需要安装 Adobe 阅读器,但很可能您仍然拥有它。将控件的 UrL 设置为文件位置。
您可以将 NuGet 包 CefSharp.WinForms 添加到您的应用程序,然后将 ChromiumWebBrowser 控件添加到您的表单。在代码中,您可以编写:
chromiumWebBrowser1.Load(filePath);
这是我找到的最简单的解决方案,它是完全免费的,并且独立于用户的计算机设置,就像使用默认 WebBrowser 控件时一样。
我想在这里提一下 Docotic.Pdf 库。它可以将 PDF 转换为 C# 和 VB.NET 中的图像。它还可以渲染和打印PDF文档。
该库是 100% 管理的,没有外部依赖项。它不依赖于 System.Drawing.dll 或 GDI+。您将在 Windows、Linux、macOS、iOS 和 Android 上获得一致的输出。
我是 Docotic.Pdf 开发人员之一,所以我非常喜欢它。请尝试一下,您可能也会喜欢它。
ceTe 软件的动态 PDF 查看器可能会满足您的需求。我已经使用了他们的生成器软件并且对它非常满意。
我用过的最简单的库是Paolo Gios 的库。基本上是
Create GiosPDFDocument object
Create TextArea object
Add text, images, etc to TextArea object
Add TextArea object to PDFDocument object
Write to stream
这是一个很棒的教程,可以帮助您入门。
这看起来是正确的:http ://code.google.com/p/lib-pdf/