57

我想使用 C# 以图形方式加载和绘制 pdf 文件。我不需要编辑它们或任何东西,只需以给定的缩放级别渲染它们。

我发现的 pdf 库似乎专注于生成。我该怎么做呢?

谢谢。

4

12 回答 12

72

谷歌已经开源了它使用 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将可用于添加:

将 PdfRenderer 控件添加到 WinForms

于 2015-01-19T15:34:18.400 回答
47

如果 Adob​​e ActiveX 不是您正在寻找的,还有其他一些选择(因为 Acrobat 必须存在于用户计算机上并且您不能自己发布)。

要创建 PDF 预览,请先查看 StackOverflow 上有关该主题的其他一些讨论:

在最后两个中,我谈到了一些你可以尝试的事情:

  • 您可以获得商业渲染器(PDFViewForNetPDFRasterizer.NETABCPDFActivePDFXpdfRasterizer和其他答案中的其他...)。
    不过大多数都相当昂贵,特别是如果您只关心制作简单的预览/缩略图。

  • 除了 Omar Shahine 的代码片段外,还有一篇CodeProject 文章展示了如何使用 Adob​​e ActiveX,但它可能已经过时,很容易被新版本破坏并且其合法性模糊不清(基本上它可以供内部使用,但你可以'不发货,您不能在服务器上使用它来生成 PDF 图像)。

  • 您可以查看SumatraPDF的源代码,这是一个适用于 Windows 的 OpenSource PDF 查看器。

  • 还有Poppler,一个使用Xpdf作为渲染引擎的渲染引擎。所有这些都很棒,但它们需要相当多的承诺才能使它们工作并与 .Net 交互,并且它们往往是在 GPL 下分发的。

  • 您可能需要考虑使用GhostScript作为解释器,因为渲染页面是一个相当简单的过程。
    缺点是您需要重新打包它以将其与您的应用程序一起安装,或者使其成为先决条件(或至少是安装过程的一部分)。
    这不是一个很大的挑战,而且肯定比不得不将其他渲染引擎与 .Net 合作更容易。
    我做了一个小项目,你可以在Developer Express 论坛上找到它作为附件。
    请注意 GhostScript 的许可证要求。
    如果你不能离开,那么商业软件可能是你唯一的选择。

于 2009-02-17T06:48:38.600 回答
13

这是我对另一个问题的回答。

首先你需要参考 Adob​​e 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 可能会被遗弃。

于 2009-02-17T06:30:03.013 回答
11

System.DrawingPdfiumViewer 很棒,但与 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();
            }
        }
    }
}
于 2017-04-10T14:26:39.757 回答
1

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 问题。如果你想沿着这条路线走,首先要非常仔细地检查合法性。

于 2009-03-24T08:41:40.470 回答
0

使用 Web 浏览器控件。这需要安装 Adob​​e 阅读器,但很可能您仍然拥有它。将控件的 UrL 设置为文件位置。

于 2009-02-06T03:01:01.757 回答
0

您可以将 NuGet 包 CefSharp.WinForms 添加到您的应用程序,然后将 ChromiumWebBrowser 控件添加到您的表单。在代码中,您可以编写:

chromiumWebBrowser1.Load(filePath);

这是我找到的最简单的解决方案,它是完全免费的,并且独立于用户的计算机设置,就像使用默认 WebBrowser 控件时一样。

于 2020-04-30T10:18:19.810 回答
0

我想在这里提一下 Docotic.Pdf 库。它可以将 PDF 转换为 C# 和 VB.NET 中的图像。它还可以渲染和打印PDF文档

该库是 100% 管理的,没有外部依赖项。它不依赖于 System.Drawing.dll 或 GDI+。您将在 Windows、Linux、macOS、iOS 和 Android 上获得一致的输出。

我是 Docotic.Pdf 开发人员之一,所以我非常喜欢它。请尝试一下,您可能也会喜欢它。

于 2021-03-19T16:00:00.177 回答
-1

ceTe 软件的动态 PDF 查看器可能会满足您的需求。我已经使用了他们的生成器软件并且对它非常满意。

http://www.dynamicpdf.com/

于 2009-02-06T02:32:11.643 回答
-1

我用过的最简单的库是Paolo Gios 的库。基本上是

Create GiosPDFDocument object
Create TextArea object
Add text, images, etc to TextArea object
Add TextArea object to PDFDocument object
Write to stream

是一个很棒的教程,可以帮助您入门。

于 2009-02-06T04:22:24.650 回答
-1

这看起来是正确的:http ://code.google.com/p/lib-pdf/

于 2013-02-05T00:43:48.467 回答
-4

您可以在 Google 上搜索PDF 查看器组件,并找到一些点击率。

但是,如果您真的不需要将它们嵌入到您的应用程序中 - 您可以只需要 Acrobat Reader 或 FoxIt(或捆绑它,如果它符合各自的许可条款)并掏出它。它不是很酷,但它可以免费完成工作。

于 2009-02-06T04:09:19.853 回答