Последнее обновление: 10 сентября 2026

Как работает сжатие внутри EPUB, DOCX, XLSX и PPTX
Если переименовать файл .docx, .xlsx, .pptx или .epub в .zip и дважды щёлкнуть по нему, происходит неожиданное: система не выдаёт ошибку. Операционная система открывает его как папку, содержащую подпапки, файлы конфигурации XML, таблицы стилей, шрифты и встроенные изображения.
Современные архитектуры документов отказались от монолитных бинарных блобов десятки лет назад. Вместо них отраслевые стандарты — а именно Open Packaging Conventions (OPC) для Microsoft Office и Open Container Format (OCF) для EPUB — приняли удивительно элегантную основу: скромный ZIP‑архив.
Понимание того, как работает сжатие внутри этих форматов, раскрывает, почему современные документы такие устойчивые, легковесные и расширяемые — и почему некоторые файлы сжимаются на 90 %, тогда как другие почти не уменьшаются.
1. Архитектура контейнеров: замаскированные пакеты ZIP
Прежде чем разбираться в самом алгоритме сжатия, полезно понять, почему современные форматы документов структурированы как пакеты, а не как отдельные необработанные файлы.
Проблема с устаревшими бинарными форматами
В течение 1990‑х и начала 2000‑х годов Microsoft Office использовал проприетарные бинарные форматы (.doc, .xls, .ppt). Эти файлы по сути представляли собой дампы памяти, структурированные вокруг Compound File Binary Format (CFBF). Они были печально известны своей хрупкостью:
- Один одиночный сбой бита мог повредить всю структуру файла.
- Встраивание изображений приводило к непредсказуемому росту размеров файлов.
- Разбор требовал обратного проектирования сложных бинарных спецификаций.
- Кроссплатформенная совместимость была кошмаром.
Переход к открытым, модульным контейнерам
В середине 2000‑х годов произошли два параллельных развития:
- Office Open XML (OOXML / ISO/IEC 29500): Microsoft представила форматы на основе XML, оканчивающиеся на
x(DOCX, XLSX, PPTX). Внутри эти файлы следуют Open Packaging Conventions (OPC). - EPUB (IDPF / W3C): Цифровое издательство отказалось от проприетарных форматов чтения в пользу стандартных веб‑технологий (HTML, CSS, SVG), упакованных в EPUB Open Container Format (OCF).
Обе архитектуры опираются на стандартную PKZIP 2.0 / ZIP specification. Расширение файла просто указывает ожидаемую схему, приложение‑просмотр по умолчанию и объявления mime‑type.
Sample DOCX File (Unzipped):
├── [Content_Types].xml <-- Registry of MIME types for parts
├── _rels/ <-- Package-level relationships
│ └── .rels
├── docProps/ <-- Core and extended metadata
│ ├── app.xml
│ └── core.xml
└── word/ <-- Main content payload
├── document.xml <-- Text, paragraphs, and tags
├── styles.xml <-- Typography and presets
├── numbering.xml <-- Lists and counters
├── media/ <-- Embedded images (PNG, JPG)
└── _rels/
└── document.xml.rels <-- Internal hyperlinks & resource pointers
2. Движок под капотом: алгоритм DEFLATE
Когда программное приложение сохраняет файл DOCX или EPUB, оно не просто помещает файлы в несжатый архив. Оно сжимает внутренние ресурсы с помощью DEFLATE (указано в RFC 1951).
DEFLATE — это двухуровневая система без потерь, объединяющая два фундаментальных алгоритма информатики:
Шаг 1: LZ77 (Lempel-Ziv 1977) — удаление избыточности скользящим окном
XML и HTML чрезвычайно многословны. Подумайте, как часто теги встречаются в стандартных файлах document.xml или chapter1.xhtml:
<w:p><w:r><w:rPr><w:sz w:val=\"24\"/></w:rPr><w:t>повторяется тысячи раз в Word.row r="1" spans="1:15"><c r="A1" t="s"><v>повторяется в Excel в десятках тысяч ячеек.<p class="calibre1"><span class="body-text">повторяется в главах книг EPUB.
LZ77 сканирует поток данных, используя скользящее окно словаря (обычно 32 КБ). Когда он встречает строку символов, которую недавно видел, он заменяет дублирующий текст небольшим обратным указателем:
(distance, length)— например, “вернуться на 142 байта, скопировать 28 байт”.
Вместо того чтобы хранить многословную разметку снова и снова, LZ77 сворачивает тысячи повторяющихся XML‑тегов в компактные координатные ссылки.
Шаг 2: Кодирование Хаффмана — кодирование частот переменной длины
После того как LZ77 заменяет избыточные последовательности токенами длина‑расстояние, Huffman coding анализирует частоту каждого символа в потоке:
- Часто встречающиеся символы (например, распространённые символы
e,t, пробелы или общие маркеры расстояний) получают короткие двоичные коды (например, от 2 до 4 бит). - Редко используемые символы получают более длинные двоичные коды (например, от 12 до 16 бит).
Результат — поток бит‑кодов переменной длины, который сжимает обычный текстовый XML на 75% до 88%.
3. Поформатный разбор: как каждый справляется со сжатием
Хотя DOCX, XLSX, PPTX и EPUB используют один и тот же ZIP‑контейнер, их внутренние характеристики данных сильно различаются.
A. DOCX: балансировка текста и стилей
- Что внутри: обычный XML (
word/document.xml), таблицы шрифтов, стили, каталоги связей и папкаword/media/. - Как работает сжатие:
- Исходный текст и разметка XML достигают огромных коэффициентов сжатия (часто уменьшаются с 5 МБ исходного XML до 500 КБ).
- Однако современные документы часто включают скриншоты, иллюстрации и фотографии. Поскольку файлы JPEG и PNG уже сжаты, DEFLATE не может их дополнительно уменьшить. На самом деле, применение DEFLATE к уже сжатому изображению практически не даёт экономии (0 %), а может даже слегка увеличить размер из‑за заголовков сжатия.
- Следовательно, DOCX‑файлы без изображений чрезвычайно малы, тогда как отчёты, насыщенные изображениями, почти полностью соответствуют размеру содержащихся в них файлов изображений.
B. XLSX: Большие объёмы числовых данных и общие строки
Электронные таблицы представляют уникальную проблему: лист может содержать сотни тысяч строк, что приводит к астрономическим размерам XML‑файлов, если не применять умные методы обработки.
- Стратегия общих строк (
xl/sharedStrings.xml):- Если текстовая метка, например “United States” или “In Progress”, появляется 50,000 раз в таблице, хранение
<c t=\"inlineStr\"><is><t>United States</t></is></c>в 50,000 ячейках раздует несжатый XML до гигабайтов. - Excel удаляет дублирование текста перед сжатием, сохраняя каждую уникальную строку один раз в таблице общих строк и ссылаясь на неё по числовому индексу (например,
<v>0</v>,<v>1</v>).
- Если текстовая метка, например “United States” или “In Progress”, появляется 50,000 раз в таблице, хранение
- Почему XLSX сжимается драматически:
- Числовые записи строк (
sheet1.xml) используют повторяющийся, предсказуемый синтаксис. - DEFLATE легко обнаруживает повторяющиеся шаблоны в табличном XML. Обычно файл
sheet1.xmlразмером 120 MB в необработанном виде сжимается до менее чем 6 MB внутри архива XLSX.
- Числовые записи строк (
C. PPTX: Презентации с большим объёмом медиа
Презентации принципиально отличаются от документов и таблиц:
- Дилемма изображений: Файлы PPTX обычно преобладают векторные формы, фоновые графики, видеоклипы и слайды высокого разрешения.
- Профиль сжатия: Хотя
ppt/slides/slide1.xmlдоslideN.xmlэффективно сжимаются, медиа‑нагрузка (ppt/media/) составляет от 85 % до 95 % от общего веса архива. - Почему повторное архивирование PPTX ничего не меняет: Если попытаться сжать уже сохранённый файл PPTX с помощью 7‑Zip или WinRAR, вы заметите почти отсутствие уменьшения размера. Потому что внутри уже находится ZIP‑архив, сжатый методом DEFLATE и содержащий предварительно сжатые JPEG и MP4, энтропия уже почти максимальна.
D. EPUB: Веб‑технологии с обязательным несжатым заголовком
Файл EPUB по сути представляет собой адаптивный упакованный микросайт, содержащий главы в формате XHTML, таблицы стилей CSS, шрифты TTF/WOFF и метаданные. Однако у EPUB есть одно строгие правило упаковки, отличающее его от файлов Microsoft Office:
EPUB Internal Structure:
├── mimetype <-- MUST be uncompressed (Stored) & at byte offset 38
├── META-INF/
│ └── container.xml <-- Tells reader where the OPF manifest lives
└── OEBPS/ (or EPUB/)
├── content.opf <-- Manifest of all book assets
├── toc.ncx / nav.xhtml <-- Table of contents navigation
├── styles/style.css <-- CSS formatting
├── images/ <-- Book cover & illustrations
└── text/ <-- chapter1.xhtml, chapter2.xhtml
- Волшебный файл
mimetype:- Электронные читалки должны мгновенно определить EPUB, не извлекая весь архив и не запуская процессы декомпрессии.
- Открытый контейнерный формат (OCF) требует, чтобы файл
mimetype:- Был первым файлом в ZIP‑архиве.
- Должен содержать точно строку
application/epb+zip. - Не должно быть сжато (метод сжатия ZIP
0/ “Хранимый”). - Не должно содержать дополнительных полей данных, гарантируя, что строка MIME всегда начинается с байта 38 физического файла.
- Сжатие текста: Все остальные файлы (
.xhtml,.css,.opf) сжимаются с использованием стандартного DEFLATE (метод ZIP8), позволяя полным романам уменьшаться до нескольких сотен килобайт.
4. Сравнение сжатия между форматами
| Формат | Основная полезная нагрузка | Основной источник избыточности | Типичное соотношение сжатия (текст/разметка) | Обработка медиа |
|---|---|---|---|---|
| DOCX | WordprocessingML (document.xml) | Повторяющиеся теги XML абзаца/запуска | 75% – 85% | Хранится в word/media/ (в основном предварительно сжатый) |
| XLSX | SpreadsheetML (sheet*.xml) | Повторяющиеся теги ячеек/строк; Общие строки | 80% – 92% | Редко; изображения/диаграммы в xl/media/ |
| PPTX | PresentationML (slide*.xml) | Метаданные макета слайда, координаты фигур | 70% – 80% | Большой объём ppt/media/ ограничивает общую экономию |
| EPUB | XHTML, CSS, OPF, NCX | HTML‑теги, повторяющиеся селекторы CSS | 65% – 80% | mimetype несжатый; медиа в подпапках |
5. Практические выводы: Как оптимизировать ваши документы
Поскольку теперь вы знаете, как работает внутренняя упаковка, вы можете использовать механизмы сжатия для решения реальных задач:
- Исправление повреждённых документов:
Если документ отказывается открываться, изменение расширения на
.zipпозволяет извлечь содержимое и восстановить исходный текст изdocument.xmlили отдельных глав из каталогаtext/EPUB. - Уменьшение гигантских офисных файлов:
Поскольку сжатие XML уже оптимизировано, огромные файлы почти всегда вызываются не оптимизированными изображениями в
media/. Вместо использования сторонних компрессоров PDF или DOCX откройте ZIP‑контейнер, извлеките изображения, пропустите их через оптимизатор изображений (например, WebP, TinyPNG или MozJPEG) и замените их внутри архива. - Автоматизация создания документов: Разработчикам не нужны тяжёлые офисные пакеты для создания отчётов. Вы можете генерировать необработанные XML‑шаблоны, упаковывать их с помощью стандартных библиотек zlib/ZIP и программно выводить корректные файлы DOCX или XLSX за миллисекунды.
6. Часто задаваемые вопросы (FAQ)
Могу ли я преобразовать DOCX или EPUB в ZIP‑файл, просто переименовав расширение? Да; переименование расширения на .zip позволяет любому стандартному архивному инструменту (например, 7‑Zip, macOS Archive Utility или Windows Explorer) открыть и напрямую просмотреть внутренние файлы.
Почему сжатие DOCX или PPTX с помощью 7‑Zip не делает файл заметно меньше? Потому что файл уже представляет собой внутренне сжатый ZIP‑архив, содержащий XML, закодированный DEFLATE, и предварительно сжатые изображения, оставляя минимальное количество избыточных данных для внешнего инструмента.
Почему спецификация EPUB требует, чтобы файл mimetype был не сжат? Это позволяет программному обеспечению электронных читалок проверять подлинность EPUB, проверяя строку MIME по фиксированному смещению байта без необходимости инициализировать движок декомпрессии.
Увеличивает ли изменение форматирования ячеек в Excel размер сжатого файла XLSX? Да; обширное пользовательское форматирование нарушает равномерное повторение шаблонов по ячейкам, создавая более длинные определения XML, что снижает эффективность сжатия DEFLATE.
Можно ли извлечь оригинальные изображения высокого разрешения из файла Word или PowerPoint без потери качества? Да; переименуйте файл в .zip, откройте папку word/media или ppt/media, и вы найдете оригинальные, несжатые исходные изображения точно в том виде, в каком они были вставлены.