C# 生成 pdf 缩略图(开源/免费)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1592112/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Generate a pdf thumbnail (open source/free)
提问by AndrewB
Looking at other posts for this could not find an adequate solution that for my needs. Trying to just get the first page of a pdf document as a thumbnail. This is to be run as a server application so would not want to write out a pdf document to file to then call a third application that reads the pdf to generate the image on disk.
查看其他帖子无法找到满足我需求的适当解决方案。试图将 pdf 文档的第一页作为缩略图。这将作为服务器应用程序运行,因此不想将 pdf 文档写入文件,然后调用第三个应用程序读取 pdf 以在磁盘上生成图像。
doc = new PDFdocument("some.pdf");
page = doc.page(1);
Image image = page.image;
Thanks.
谢谢。
采纳答案by Peter
Matthew Ephraim released an open source wrapper for Ghostscript that sounds like it does what you want and is in C#.
Matthew Ephraim 发布了一个 Ghostscript 的开源包装器,听起来像你想要的那样,并且是在 C# 中。
Link to Source Code: https://github.com/mephraim/ghostscriptsharp
源代码链接:https: //github.com/mephraim/ghostscriptsharp
Link to Blog Posting: http://www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/
博客链接:http: //www.mattephraim.com/blog/2009/01/06/a-simple-c-wrapper-for-ghostscript/
You can make a simple call to the GeneratePageThumb method to generate a thumbnail (or use GeneratePageThumbs with a start and end page number to generate thumbnails for multiple seperate pages, with each page being a seperate output file), default file format is jpeg but you can change it, and many other options, by using the alternate GenerateOutput method call and specify options such as file format, page size, etc...
您可以简单地调用 GeneratePageThumb 方法来生成缩略图(或者使用带有开始和结束页码的 GeneratePageThumbs 为多个单独的页面生成缩略图,每个页面都是一个单独的输出文件),默认文件格式为 jpeg,但您可以通过使用备用 GenerateOutput 方法调用并指定文件格式、页面大小等选项来更改它和许多其他选项...
回答by Sebastian Edelmeier
I used to do this kind of stuff with imagemagick (Convert) long ago. There is a .Net Wrapper for that, maybe it's worth checking out : http://imagemagick.codeplex.com/releases/view/30302
很久以前我曾经用 imagemagick (Convert) 做这种事情。有一个 .Net Wrapper,也许值得一试:http: //imagemagick.codeplex.com/releases/view/30302
回答by Ivan I?in
I think that Windows API Code pack for Microsoft .NET frameworkmight do the trick easiest. What it can is to generate the same thumbnail that Windows Explorer does (and that is first page), and you can chose several sizes, they go up to 1024x1024, so it should be enough. It is quite simple, just create ShellObject.FromParsingName(filepath) and find its Thumbnail subclass.
我认为Microsoft .NET 框架的 Windows API 代码包可能最简单。它可以生成与 Windows 资源管理器相同的缩略图(即第一页),您可以选择多种尺寸,它们最大为 1024x1024,所以应该足够了。很简单,只需创建 ShellObject.FromParsingName(filepath) 并找到它的 Thumbnail 子类。
The problem might be what your server is. This works on Windows 7, Windows Vista and I guess Windows Server 2008. Also, Windows Explorer must be able to show thumbnails on that machine. The easiest way to insure that is to install Adobe Reader. If all of this is not a problem, I think that this is the most elegant way.
问题可能是您的服务器是什么。这适用于 Windows 7、Windows Vista 和我猜 Windows Server 2008。此外,Windows 资源管理器必须能够在该机器上显示缩略图。确保这一点的最简单方法是安装 Adobe Reader。如果这一切都不是问题,我认为这是最优雅的方式。
UPDATE: Adobe Reader has dropped support for thumbnails in the recent versions so its legacy versions must be used.
更新:Adobe Reader 在最近的版本中已经放弃了对缩略图的支持,因此必须使用其旧版本。
UPDATE2: According to comment from Roberto, you can still use latest version of Adobe Reader if you turn on thumbnails option in Edit - Preferences - General.
UPDATE2:根据 Roberto 的评论,如果您在编辑 - 首选项 - 常规中打开缩略图选项,您仍然可以使用最新版本的 Adobe Reader。
回答by saille
http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
http://www.codeproject.com/KB/cs/GhostScriptUseWithCSharp.aspx
This works very well. The only dependencies are GhostScript's gsdll32.dll (you need to download GhostScript separately to get this, but there is no need to have GhostScript installed in your production environment), and PDFSharp.dll which is included in the project.
这非常有效。唯一的依赖是GhostScript 的gsdll32.dll(需要单独下载GhostScript 来获取,但不需要在生产环境中安装GhostScript)和项目中包含的PDFSharp.dll。
回答by Jorge Alberto Chavez Barrera
Download PDFLibNetand use the following code
下载 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;
}