Как вытягивать превью из файла?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

denis-gr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.11.2002 (Чт) 18:27

Как вытягивать превью из файла?

Сообщение denis-gr » 21.03.2007 (Ср) 2:49

Вопросы наверное чайниковские, но где искать это в msdn мне не ястно (сами мы не программеры :) ).
Итак пишу на VB.net маленький браузер.
1. Как вытягивать превью из файла (в первую очередь интересуют PDF, хотя наверное все равно какой файл)?
2. Как сделать полноценный просмотр PDF (в обычной форме или в отдельном окне Эксплоурера)?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.03.2007 (Ср) 9:35

1. Иные файлы реально содержат маленькую превьюшку, большинство нет. Соответственно, смотреть по формату файла, есть ли она там. Если нет, получать полное изображение и уменьшать.
2. Например, путём использования ocx, появившегося у adobe reader в версии 7.0.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.03.2007 (Ср) 9:54

1. Есть какие-то универсальные механизмы, благодаря которым шелл умеет вытягивать превьюшки из очень многих типов файлов. Если удастся их заюзать, то не нужно будет привязываться к (ненавистному мне) adobe reader версии 7.0
Изображение

denis-gr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.11.2002 (Чт) 18:27

Сообщение denis-gr » 22.03.2007 (Чт) 1:51

1. Эти PDF-файлы БУДУТ содержать превьюшку.

2. Какого-нибудь *.ocx с названием, похожим на Acrobat или Adobe на своей машине (у меня Акробат не Ридер, а полный Professional 7) я не нашел. Если честно, я не пойму, что это такое и куда его подключать. Что это?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.03.2007 (Чт) 12:00

:roll:
Adobe Acrobat 7.0 Browser Control Type Library 1.0
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

denis-gr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.11.2002 (Чт) 18:27

Сообщение denis-gr » 31.03.2007 (Сб) 2:37

Ну вообщем второй пункт задачи так и не решен (первый тем более): открыть PDF (а лучше любой файл) ассоциированным с ним приложением.
Пишу
Код: Выделить всё
Declare Function ShellExecute Lib "shell32.dll" Alias _
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

ShellExecute(0, "open", myPath1, 0, 0, 0)

Не работает на путях с русскими буквами и почему-то с серверными путями на латинице.

Насколько я понял, шеллу надо передать путь в ANSI, а не в Юникоде. Но как это сделать?????

Еще пожелание: можно ли таким образом PDF-файлы открывать не в Адобе Ридере, а в Эксплоурере?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 31.03.2007 (Сб) 6:38

Чтение документации по Declare в VB.NET весьма пользительно... Во-первых можно выяснить что такое Long и Integer, во-вторых заценить ключевые слова такие как ANSI или же Unicode. Или же вообще задуматься о классе Process.

А второй пункт решен в посте GSerg
Последний раз редактировалось Viper 31.03.2007 (Сб) 11:22, всего редактировалось 1 раз.
Весь мир матрица, а мы в нем потоки байтов!

denis-gr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.11.2002 (Чт) 18:27

Сообщение denis-gr » 31.03.2007 (Сб) 11:05

Спасибо! Хотя прочтение доки по Declare ясности не много прибавило, методом тыка удалось решить первый пункт! До этого два вечера было потрачен в пустую -- не программеры мы.
P.S. В своё время понравился VB из-за того, что даже имея незначительные в нем познания, интуитивно можно писать работосплсобный код. Но чуть шагнешь в сторону (WinAPI и пр.) -- начинается полное непонимание "почему это не работает".

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 31.03.2007 (Сб) 11:21

Зачем же методом тыка то все решать? Документация она на то и есть, чтоб решать не методом тыка, а вполне нормальным образом. Что осталось непонятного по Declare?
Весь мир матрица, а мы в нем потоки байтов!

denis-gr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.11.2002 (Чт) 18:27

Сообщение denis-gr » 31.03.2007 (Сб) 14:16

>Что осталось непонятного по Declare?
Почему тупая смена в строке "hwnd As Long" на Integer привела к тому, что функция стала работать правильно - там все равно нули передаются. К тому же приведенный выше код я не из головы взял, а из msdn или ещё чего-нибудь.

Glyckmen
Обычный пользователь
Обычный пользователь
 
Сообщения: 72
Зарегистрирован: 30.04.2006 (Вс) 15:32
Откуда: Санкт-Петербург

Сообщение Glyckmen » 31.03.2007 (Сб) 14:46

denis-gr писал(а):>Что осталось непонятного по Declare?
Почему тупая смена в строке "hwnd As Long" на Integer привела к тому, что функция стала работать правильно - там все равно нули передаются.
Ну наверно дело в выделяемой памяти под переменную и ее передачи в функцию, в VB.NET тип LONG занимает 8 байт в памяти, а INTEGER 4 байта, при чтении документации для VB6 надо учитывать что там тип LONG (4 байта) равен типу INTEGER(4 байта) на VB.NET.
Функция ждет от тебя 4-х байтовую переменную, а ты ей суешь 8 байт (и тут не зависит какое число там хранится) и здесь как раз и происходит большинство ошибок от переполнения до непредсказуемых результатов.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.04.2007 (Вт) 14:18

tyomitch писал(а):1. Есть какие-то универсальные механизмы, благодаря которым шелл умеет вытягивать превьюшки из очень многих типов файлов. Если удастся их заюзать, то не нужно будет привязываться к (ненавистному мне) adobe reader версии 7.0

Почему-то эту идею никто не воспринял всерьёз.
Странно :-|

Готовые примеры на VB.net:
* http://msdn2.microsoft.com/en-us/library/aa289172(vs.71).aspx
* http://vbaccelerator.com/home/NET/Code/ ... rticle.asp

Абсолютная универсальность и отсутствие зависимостей от конкретных версий Акробата, установленных на машине.
Изображение

denis-gr
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 14.11.2002 (Чт) 18:27

Сообщение denis-gr » 07.04.2007 (Сб) 17:19

В процессе экспериментов в приведенными выше ссылками выяснилось, что Шелл в PDF не читает thumbnails, а рендерит всю полосу (первую для многостраничных документов).
Так же выяснилось, что встроенные в EPS'ы thumbnails ни Шеллом , ни Эксплоурером тоже не читаются (во времена Иллюстратора CS Экслоурер пытался их читать)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 92

    TopList