Windows API代码包 - ShellFile不生成PDF位图

时间:2013-08-15 21:40:11

标签: c# pdf thumbnails windows-api-code-pack

使用先前堆栈溢出问题中的代码:

System.Drawing.Bitmap image;
ShellFile f = ShellFile.FromFilePath(fileLocation);
image = f.Thumbnail.ExtraLargeBitmap;
image.Save(tempfile, ImageFormat.Png);

我正在尝试使用窗口API来获取PDF的缩略图

我被认为这会生成一个类似于PDF文档第一页的图像文件。

然而现实情况是,它看起来并不像那样,只是看起来像PDF图标。

在实际按预期工作之前,是否还有任何我需要的东西?

PDF文件与adobe reader正确关联。

在Windows资源管理器中浏览目录时,我 DO 会看到与文档关联的缩略图。

我应该注意,在处理Excel和Word文档时,代码实际上正确地提取了缩略图。

编辑(参考):

3 个答案:

答案 0 :(得分:2)

您需要指定您想要缩略图,而不是图标(默认)。 将您的代码更改为:

System.Drawing.Bitmap image;
ShellFile f = ShellFile.FromFilePath(fileLocation);

//force the actual thumbnail, not the icon
f.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;

image = f.Thumbnail.ExtraLargeBitmap;
image.Save(tempfile, ImageFormat.Png);

答案 1 :(得分:1)

问题是因为您没有选择要从中创建缩略图的活动框架。

我无法在当前的机器上验证它,因为我没有Windows API,但是它为您提供标准的PDF缩略图,因为在您的代码中您没有指定用于缩略图的页面。 / p>

尝试做这样的事情:

        Image image = new Image();
        //Load image here
        int frameindex = 1; // Page number you want to use for thumbnail
        Guid guide = image.FrameDimensionsList[0];
        FrameDimension fDimension = new FrameDimension(guide);
        image.SelectActiveFrame(fDimension, frameindex);
        //Then go on to extract your thumbnail

答案 2 :(得分:0)

我无法让ExtraLargeBitmap适用于PDF文件,但所有其他尺寸(大,中,小)都能正常工作。

Dim MyShellFile As ShellFile = ShellFile.FromFilePath(fi.FullName)
Dim MyThumbNail As Image
MyShellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly
MyThumbNail = MyShellFile.Thumbnail.LargeBitmap
Me.PictureBox2.Image = MyThumbNail