­
­

OLE, OLE!

топ 100 блогов dibr17.01.2025 А сегодня будет небольшая история о связывании и впендюривании (не БДСМ).

Ещё в прошлом веке, когда девяностопятая винда только-только начиналась(*), микрософт придумал технологию, названную OLE - Object Linking and Embedding, то есть собственно связывание (друг с другом) и впендюривание (друг в друга) объектов. Одно из главных применений - чтобы можно было обычным копипейстом впендюрить (embed) в документ, допустим, ворда, совершенно другой документ - допустим, таблицу экселя, при этом связав (link) впендюренную в ворд табличку с экселем. Визуально это выглядит так, как должно выглядеть - как "табличка в тексте", но физически за табличкой прячется (и сохраняется в файле) полноценный документ эксель, в результате при двойном клике мышом эксель открывается прямо там, внутри ворда, и можно редактировать эксельную табличку в экселе, не покидая при этом ворда. В принципе удобненько, и до сих пор, кстати, работает. Но иногда бывают нюансы.

Пишем на работе отчёт, в ворде. Точнее, несколько человек пишут каждый свой кусок отчёта, потом всё это соединяется воедино, и начинается редактирование с целью доведения до ума. После слияния отдельных кусков я сразу же убеждаюсь, что отчёт занимает 22 мегабайта, что несколько больше рекомендованных "не более 10". Поскольку основное место в вордовом документе занимают, естественно, картинки, принимаюсь за их сжатие - только растровых, векторные сжимать смысла вроде как нет. Кое-как ужимаю до 9.6Мб, успокаиваюсь.
Далее выясняется, что одна из картинок - скан листа А4, наверняка занимающий этак треть или четверть файла, потому что все остальные картинки мелкие - не нужна в отчёте, она нужна отдельно. Радостно выкидываю картинку - файл уменьшается до 8.8Мб - меньше чем на 10%. "Что-то тут не так" - думаю я.
И, поскольку известно что .docx уже давно на самом деле .zip - тупо лезу внутрь FAR'ом: там, конечно, "кровь, кишки и недокументированные внутренние структуры", но кое-что понять можно. И после непродолжительного осмотра "где тут самые большие куски данных", обнаруживаю пять штук довольно больших (~1.7Мб) embedded (т.е. невидимым образом прицепленных к картинкам) файлов. Выкидываю их(**), и сразу получаю файл размером 990кб - почти в десять раз меньше!
Но тут уже мне становится интересно - что же за картинки такие, с такими огромными исходниками - намного больше самих картинок? Сопоставляю с документом, обнаруживаю что это несколько очень простеньких графиков, например одна из картинок - график функции, с осями и подписью - тупо чёрные линии (даже не кривые, прямые) и черный текст на белом фоне. Извлекаю соответствующий привязанный документ, оказавшийся документом CorelDraw (напрямую из редактора сохранить не удалось, а то что лежит внутри docx "правильным" документом corel не является, но можно открыть на редактирование в ворде, скопировать, вставить в собственно корел и сохранить), захожу внутрь (.cdr тоже уже давно .zip. Похоже скоро всё будет zip, кроме может быть самого zip), осматриваюсь.
И сходу обнаруживаю прицепленный к документу цветовой профиль CMYK ISO Coated v2 (ECI) размером 1.7Мб. Бурно восторгаюсь полётом фантазии - нафига цветовой профиль для рисунка чёрными линиями на белом фоне; но "циферки немного не сходятся" (файл явно крупнее профиля), поэтому осматриваюсь дальше.

Как там было в Inception, "we need to go deeper"? [дикаприо.jpg]

В документе корела (впендюренном в ворд, и содержащем простой рисунок из нескольких кривулин) обнаруживается вложенный впендюренный документ размером 1Мб. При этом сам корел при редактировании документа показывает только свои стандартные объекты (кривые, текст), впендюренный объект не видит (открыть на редактирование не даёт, даёт только встроенные инструменты; при копипейсте нет вариантов в paste special), но при удалении картинки впендюренный документ пропадает (файл резко уменьшается). Методом постепенного удаления кривых и букв, удалось создать документ, с точки зрения корела содержащий одну-единственную букву "х", выполненную встроенным инструментом artistic text, но внутри имеющий прикрепленные к этой букве (исчезающие при её удалении) цветовой профиль на 1.7Мб и загадочный документ на 1Мб. Дешифровать документ пока не удалось - внутри из осмысленного текста видно только "version 7.0", но предположительно это пакет Mathematica - он использовался одним из авторов отчёта. При копипейсте в новый документ, как профиль так и загадочный embed выживает. Даже если копипейст сделать в ворд.

Так что теперь у меня есть документ corel, с точки зрения корела содержащий одну букву (кстати, не из оригинального файла - я стёр там все буквы и набрал "х" вручную), но занимающий 1.8Мб. Кому интересно, могу дать поиграться :-)


И ещё. Кто-нибудь знает, есть ли штатный способ быстро "отбить" у вордового документа весь этот долбаный embedding - ну, такой чтобы безопаснее "хирургии бензопилой" (вырезать прямо из файла)? Пока знаю только "вырезать/вставить как метафайл", повторённое для каждой картинки, но когда картинок много, хочется какой-то автоматизации. И с корелом непонятно - ну знает же он, что к объекту прицеплен OLE-объект, но никак это не показывает и сделать ничего не даёт, это как это, и можно ли штатно побороть?..


(*) на самом деле ещё раньше, википедия говорит, OLE было создано в 90 году. Но более-менее массовым это стало чуть позже.
(**) тупо удалил их тем же FAR'ом "из кишок" .docx файла. Это очень грубо и неправильно, на уровне аппендэктомии бензопилой без наркоза - ссылки-то на них остаются висеть, но это сработало, ворд не упал, документ после сеанса полевой хирургии пересохранился нормально.

Оставить комментарий

Предыдущие записи блогера :
Архив записей в блогах:
Однажды, пробегая дождливым днём по Москве, я нашла атом солнца. Он спокойненько лежал себе прямо на улице, и глядя на него, сразу хотелось улыбаться, моментально забыв, что только что чертыхалась по поводу дождя и забытого зонта. Скульптурную композицию "Атом Солнца Олега Табакова" ...
Гром грянул - на один день в неделю вызывают работать в офис. Пока гром не грянет - мужик не перекрестится, то есть два года, что мы работали из дома, я и машину не водила. Поэтому в воскресенье с утра был контрольный пробег по маршруту дом-работа-дом. Потом мыла машину - вот пол-дня ...
1. Фильм где ребёнок на Хэллоуин пришёл в красном костюме к деду и хотел яйцами вроде закидать на что дед начал ему чё-то дома загонять(рассказывать истории), а в это время в этом ...
Всего через 9 дней станция «Новые горизонты» совершит пролет объекта пояса Койпера 2014 MU69, также известного как Ультима Туле. Он станет самым далеким в истории небесным телом, исследованным земным посланцем с близкого расстояния. Летом 2017 года Ультима Туле совершил покрытие ...
А я-то думала - хоть одна условно позитивная новость будет за последние недели... Не получилось, похоже, у вояк "вежливого переворота". А так все хорошо начиналось :(  ...