Где в doc документе хранится его эскиз?
Нужно получить эскиз doc-документа. Из того, что смог найти в интернете узнал, что если при сохранении документа поставить галочку "Сохранить эскиз", то в документе сохраняется миниатюра. Но вот где именно она хранится найти не смог. Может кто подскажет?
Итак, по порядку:
0. Открываешь документ и перечисляешь его IPropertySetStorage, пока не наткнёшься на свойство FMTID_SummaryInformation
1. С помощью IEnumSTATPROPSTG перечисляешь список свойств, пока не наткнёшься на PIDSI_THUMBNAIL. Да, это оно!
2. ОНО является значением PROPVARIANT типа VT_CF (clipboard format), и тут тебе уже надо разобраться, как его извлечь. Подсказка — для этого тебе понадобится поле PROPVARIANT.pclipdata.
Upd.: о, даже нашёл ещё немного информации об этом (ближе к концу страницы, ищи по словам "pClipData value"). Т.к. с большой долей вероятности у тебя там будет метафайл, то дальше идёшь сюда за описанием. В принципе, я окинул взглядом — всё там понятно, разберёшься с форматом и как данные извлечь. Если не понятно/лень/иные причины, пиши, расскажу то, что я почерпнул.
Только учти, что если тебе нужно получить эскиз .doc'а в любом месте, а не в каком-то конкретно тебе нужном, то этот способ тебе не поможет, т.к. Word, насколько я знаю, создаёт эскиз только 1-й страницы. И да, этот способ действителен только для версий Office не старше 2003, потому что начиная с MSO 2007 всё хранится в .zip-архиве, и извлечь оттуда ещё проще. Поэтому уточни версию, а то вдруг окажется, что я зря тут распинался :D
Бросаю ваш форум
Цитата: @pixo $oft
И да, этот способ действителен только для версий Office не старше 2003, потому что начиная с MSO 2007 всё хранится в .zip-архиве, и извлечь оттуда ещё проще.
А вот с этого момента можно поподробнее?) Как достать оттуда?)
Мне нужно с любого doc документа получать эскиз (т.е. версия word'а не имеет значения). Если эскиза в файле нет, то я просто иконку показывать буду.
А если всё-таки интересуют версии 2003 и ниже, то могу даже код написать (если самому лень ☺).
Upd.: сохранил документ с превьюхой в .docx, там она не сохраняется. Видимо, убрали такую возможность. Так что тебе остаётся только 2003 и ранее :-)
Цитата: @pixo $oft
то могу даже код написать
Код сам напишу, ибо я пишу на CAVO, а ты вряд ли о нем вообще слышал (как и кто-либо вообще) :)
Долгие зимние вечера, потраченные на поиск ответа, не дали результатов. Еще раз спасибо!)
Цитата: fen1xxx
Код сам напишу, ибо я пишу на CAVO, а ты вряд ли о нем вообще слышал (как и кто-либо вообще) :)
[offtop]
Завывая "I need to let it go, I need to let it go, I need to let it go"? ;)
[/offtop]
Действительно, сия аббревиатура мне незнакома. Если там нет проблем с интерфейсами и ты поймёшь MSDN, то уверен, у тебя получится ☺