6

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

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 资源管理器中浏览目录时,我确实看到了与文档关联的缩略图。

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

编辑(参考):

4

3 回答 3

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);
于 2014-03-23T14:00:36.257 回答
1

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

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

尝试做这样的事情:

        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
于 2013-08-15T22:20:33.223 回答
0

I was not able to get ExtraLargeBitmap to work for PDF files but all other sizes (Large, Medium, and Small) worked fine.

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
于 2014-11-19T16:00:49.283 回答