生成pdf缩略图(开源/免费)

时间:2009-10-20 02:08:37

标签: c# .net image pdf open-source

查看其他帖子无法找到满足我需求的适当解决方案。试图将pdf文档的第一页作为缩略图。这将作为服务器应用程序运行,因此不希望将pdf文档写入文件,然后调用第三个读取pdf的应用程序以在磁盘上生成映像。

doc = new PDFdocument("some.pdf");
page = doc.page(1);
Image image = page.image;

感谢。

5 个答案:

答案 0 :(得分:26)

Matthew Ephraim发布了一个Ghostscript的开源包装器,听起来像是你想做的并且在C#中。

源代码链接:https://github.com/mephraim/ghostscriptsharp

博客发布链接:http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/

您可以对GeneratePageThumb方法进行简单调用以生成缩略图(或使用带有开始和结束页码的GeneratePageThumbs为多个单独的页面生成缩略图,每个页面都是单独的输出文件),默认文件格式为jpeg,但您可以通过使用备用GenerateOutput方法调用并指定选项(如文件格式,页面大小等)来更改它和许多其他选项...

答案 1 :(得分:19)

我认为Windows API Code pack for Microsoft .NET framework可能最容易做到这一点。它可以生成与Windows资源管理器相同的缩略图(也就是第一页),并且您可以选择多种尺寸,它们最高可达1024x1024,因此它应该足够了。这很简单,只需创建ShellObject.FromParsingName(filepath)并找到它的Thumbnail子类。

问题可能是您的服务器。这适用于Windows 7,Windows Vista,我猜Windows Server 2008.此外,Windows资源管理器必须能够在该计算机上显示缩略图。确保这一点的最简单方法是安装Adobe Reader。如果所有这些都不是问题,我认为这是最优雅的方式。

更新:Adobe Reader在最近的版本中放弃了对缩略图的支持,因此必须使用其旧版本。

UPDATE2:根据Roberto的评论,如果您在编辑 - 首选项 - 常规中打开缩略图选项,您仍然可以使用最新版本的Adobe Reader。

答案 2 :(得分:1)

下载PDFLibNet并使用以下代码

public void ConvertPDFtoJPG(string filename, String dirOut)
{
    PDFLibNet.PDFWrapper _pdfDoc = new PDFLibNet.PDFWrapper();
    _pdfDoc.LoadPDF(filename);

    for (int i = 0; i < _pdfDoc.PageCount; i++)
    {

        Image img = RenderPage(_pdfDoc, i);

        img.Save(Path.Combine(dirOut, string.Format("{0}{1}.jpg", i,DateTime.Now.ToString("mmss"))));

    }
    _pdfDoc.Dispose();
    return;
}
public  Image RenderPage(PDFLibNet.PDFWrapper doc, int page)
{
    doc.CurrentPage = page + 1;
    doc.CurrentX = 0;
    doc.CurrentY = 0;

    doc.RenderPage(IntPtr.Zero);

        // create an image to draw the page into
        var buffer = new Bitmap(doc.PageWidth, doc.PageHeight);
        doc.ClientBounds = new Rectangle(0, 0, doc.PageWidth, doc.PageHeight);
        using (var g = Graphics.FromImage(buffer))
        {
            var hdc = g.GetHdc();
            try
            {
                doc.DrawPageHDC(hdc);
            }
            finally
            {
                g.ReleaseHdc();
            }
        }
        return buffer;

}

答案 3 :(得分:0)

我以前用imagemagick(转换)做过这种事。 有一个.Net Wrapper,也许它值得一试: http://imagemagick.codeplex.com/releases/view/30302

答案 4 :(得分:0)

http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx

这非常有效。唯一的依赖项是GhostScript的gsdll32.dll(您需要单独下载GhostScript才能获得此功能,但不需要在生产环境中安装GhostScript),以及项目中包含的PDFSharp.dll。