Windows API Code Pack - ShellFile не генерирует растровое изображение PDF
Использование кода из предыдущих вопросов о переполнении стека:
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.
РЕДАКТИРОВАТЬ (ссылки):
3 ответа
Вы должны указать, что вы хотите миниатюру, а не значок (по умолчанию). Измените свой код на это:
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);
Проблема в том, что вы не выбрали активный кадр, из которого вы будете создавать миниатюру.
Я не могу проверить это на моем текущем компьютере, потому что у меня нет 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
Мне не удалось заставить 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