查看其他帖子无法找到满足我需求的适当解决方案。试图将pdf文档的第一页作为缩略图。这将作为服务器应用程序运行,因此不希望将pdf文档写入文件,然后调用第三个读取pdf的应用程序以在磁盘上生成映像。
doc = new PDFdocument("some.pdf");
page = doc.page(1);
Image image = page.image;
感谢。
答案 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。