Практическое сжатие электронных документов
« Работа с данными с нечеткой структурой | Расшифровка кодов ИНН, КПП, ОГРН и номера паспорта »
21 Июнь 2009
В прошлой заметке я писал о метаданных скрываемых в офисных документах (см. Извлечение скрытых метаданных из MS Office), на сей раз я подробнее остановлюсь на сжатии электронных документов.
Да, многие могут сказать что пользы от сжатия документов немного учитывая текущую стоимость носителей и средств хранения информации, но всё же есть ситуации когда это может быть необходимо:
1. Пересылка документов по электронной почте.
2. При публикации документов на сайтах, потребность в экономии трафика.
3. Экономия дискового пространства в случаяъ когда замена или добавление средств хранения затруднительно. Например, подобное бывает когда выбить бюджет под капитальные расходы непросто, а дискового пространства нехватает.
Приведённые далее способы относительно практичны, поскольку описываются методики, а не конкретные рекомендации делать это вручную. Большая часть описанных действий поддаются автоматизации и автоматизируются.
Итак далее о способах уменьшения размеров документов.
Простой способ
- Для начала необходимо понять какого рода документы имеются в наличии. Если документы представлены в формате Rich Text (.RTF) или форматах MS Office 2003 (.DOC, .XLS, .PPT) и так далее, то задача решается довольно просто, необходимо преобразовать их, либо в форматы OpenDocument, либо в форматы OpenXML в зависимости от среды где они будут использоваться. За счёт того что и OpenDocument и OpenXML хранят данные внутри ZIP-контейнера, то выигрыш в объёмах файла может быть весьма существенным. Для текстовых документов, файл может сжаться в 2-2.5 раза. При этом фажно помнить что в некоторых случаях преобразование в OpenXML и OpenDocument может не помогать, например, в случаях когда документы содержат множество уже сжатых изображений.
Продвинутые способы
Если документы уже преобразованы в OpenDocument или OpenXML или же сжатия достигнутого преобразорванием в них недостаточно, то можно продожить сжатие следующими способами:
- "Пережать" документ другим архиватором ZIP. Фокус в том что ни OpenOffice, ни MS Office всех версий при сохранении документов OpenXML и OpenDocument сжимают их довольно слабо. В этом можно убедится распаковав любой из документов любым распаковщиком ZIP файлов и снова сжав содержимое итоговой директории архиватором. Лично я для экспериментов использовал 7-ZIP в режиме максимальной компресии. В итоге, для документов с большими объёмами текстов и небольшими объёмами изображений, документ может быть "дожат" ещё на 25%.
- "Пережать" изображения. В большинстве случаев, самые большие файлы электронных документов те которые содержат изображения в самых различных форматах. Чаще всего эти изображения в форматах JPEG, PNG и GIF и они могут быть существенно уменьшены существующими инструментами. Например, JPEG файлы пережимаются со степенью сжатия 85 и удалением данных EXIF, а PNG файлы могут быть уменьшены вдвое с помощью таких инструментов как pngcrush или pngout. В итоге размеры файла могут быть уменьшены от 10 до 50% в зависимости от объёма сжимаемых изображений. В файлах OpenXML изображения хранятся в папке ppt/media - для презентаций, doc/media - для документов, xl/media - для файлов таблиц, Resources/Images - для файлов XPS
- Преобразование векторной графики. Особенность документов подготавливаемых в MS Office, наличие в них изображений не в растровом, а в векторных форматах. Так зачастую документы содержат .WMF и .EMF (Windows Metafile и Enchanced Metafile) весьма значительными по объёму. Несмотря на то что эти векторные форматы хорошо сжимаются и внутри ZIP контейнера могут быть уменьшены в 10 раз, но за счет преобразования их в растровые форматы JPG или PNG они могут быть уменьшены ещё больше. Недостаток этого подхода в том что преобразование не проходит незаметно и растрового изображения может быть хуже чем у векторного, но всё ещё приемлимо для просмотра.
- Удаление изображений предпросмотра (thumbnail). Что OpenOffice, что MS Office сохраняют в документах небольшие изображения для их предпросмотра. Для файлов OpenXML такое изображение хранится в JPEG формате и располагается в папке "docProps" в виде файла thumbnail.jpeg. Этотфайл можно удалить или пережать. При его удалении необходимо также удалить на него ссылку в "_rels/.rels". Для файлов OpenDocument файл предпросмотра хранится в папке "Thumbnails" св формате PNG и с именем "thumbnail.png". Этот файл можно также сжать или удалить. При удалении также необходимо удалить ссылку на него из META-INF/manifest.xml. Файлы предпросмотра, как правило, невелики, в пределах 4-15 килобайт. Их удаление актуально лишь при большом числе небольших документов.
Сложные способы
Далее ещё ряд сложных способов применимые лишь в ограниченном числе задач, например, для долгосрочного хранения.
- Переупаковка в другой контейнер. Как упоминалось ранее, все файлы OpenXML и OpenDocument - это, по факту, коллекция файлов собранная по определённым правилам и упакованная в ZIP файл. Соответственно объём файла во многом зависит от алгоритма и степени сжатия и для ZIP файлов имеет свои ограничения. Если те же файлы переупаковать другим архиватором, например, Stuffit, Winrar или 7-Zip, то размер файла результата может быть существенно меньше чем ZIP, от 10 до 50%. Недостаток такого преобразования в том что прежде чем использовать любой из документов его необходимо будет пересобрать - распаковав из используемого контейнера обратно в ZIP.
- Специальное дожатие JPEG. JPEG файлы обладают той особенностью что редко хорошо сжимаются "обычными архиваторами". В принципе, инструментов способных дожать JPEG файлы хотя на 10% немного - это Stuffit Deluxe и packJPG, которые, в отличии от способов оптимизации JPEG'ов, cоздают архивы в своих форматах и для того чтобы восстановить итоговый документ необходима будет обратная распаковка JPEG'ов внутри документа что нельзя реализовать в рамках существующих форматов и необходимо использовать некий промежуточный архивный формат хранения.
Связанные тэги: msoffice, документы, метаданные, сжатие
blog comments powered by Disqus
RSS