生成pdf缩略图(开源/免费)
查看其他post无法找到满足我需求的适当解决方案。 试图将pdf文档的第一页作为缩略图。 这将作为服务器应用程序运行,因此不希望将pdf文档写入文件,然后调用第三个读取pdf的应用程序以在磁盘上生成映像。
doc = new PDFdocument("some.pdf"); page = doc.page(1); Image image = page.image;
谢谢。
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方法调用并指定选项(如文件格式,页面大小等)来更改它和许多其他选项…
我认为用于Microsoft .NET框架的Windows API代码包可能最容易实现。 它可以生成与Windows资源管理器相同的缩略图(也就是第一页),并且您可以选择多种尺寸,它们最多可达1024×1024,因此它应该足够了。 这很简单,只需创建ShellObject.FromParsingName(filepath)并找到它的Thumbnail子类。
问题可能是您的服务器。 这适用于Windows 7,Windows Vista和我猜Windows Server 2008.此外,Windows资源管理器必须能够在该计算机上显示缩略图。 确保这一点的最简单方法是安装Adobe Reader。 如果所有这些都不是问题,我认为这是最优雅的方式。
更新:Adobe Reader在最新版本中放弃了对缩略图的支持,因此必须使用其旧版本。
更新2:根据Roberto的评论,如果您在编辑 – 首选项 – 常规中打开缩略图选项,您仍然可以使用最新版本的Adobe Reader。
下载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; }
我以前用imagemagick(转换)做过这种事。 有一个.Net Wrapper,也许它值得一试: http : //imagemagick.codeplex.com/releases/view/30302
http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
这非常有效。 唯一的依赖项是GhostScript的gsdll32.dll(您需要单独下载GhostScript才能获得此function,但不需要在生产环境中安装GhostScript),以及项目中包含的PDFSharp.dll。