当前位置:  开发笔记 > 编程语言 > 正文

如何使用C#渲染pdf

如何解决《如何使用C#渲染pdf》经验,为你挑选了4个好方法。

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

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

谢谢.



1> Paddy..:

谷歌开源了它与福昕软件合作的优秀PDF渲染引擎--PDF.

有一个名为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中获取pdfRenderer控件:将PdfiumViewerNuGet包添加到项目中; 在Windows资源管理器中打开项目包文件夹并将PdfiumViewer.dll文件拖到Toolbox窗口上; 一个名为的控件PdfRenderer可以添加:

将PdfRenderer控件添加到WinForms


我知道这是一个老线程,但值得评论.如果您正在处理一个密切的源项目并且需要处理pdf,那么这就是您想要的库.其他一切都需要付费许可才能使用.
**到目前为止,这是关于winforms应用程序中pdf查看器问​​题的最佳答案**.我想知道为什么它没有被标记为这篇文章的答案!谢谢@Paddy,这是一个很好的帮助!

2> Renaud Bompu..:

如果Adobe ActiveX不是您正在寻找的内容,还有其他一些选择(因为Acrobat必须存在于用户计算机上而您自己无法发送).

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

如何预览文件?

在Windows上预览pdf的jpeg?

.NET在winform中打开PDF而没有外部依赖性

PDF预览和查看

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

您可以在其他答案中获得商业渲染器(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的许可证要求.
如果你不能离开,那么商业软件可能是你唯一的选择.



3> Omar Shahine..:

以下是我对另一个问题的回答.

首先,您需要参考Adobe Reader ActiveX控件

Adobe Acrobat浏览器控件类型库1.0

%programfiles&\ Common Files\Adob​​e\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可能会被遗弃.



4> 小智..:

PdfiumViewer很棒,但是System.Drawing与WinForms 紧密耦合。因此,我围绕PDFium创建了自己的包装器:PDFiumSharp

页面可以呈现为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();
            }
        }
    }
}

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有