Останнє оновлення: 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/epub+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’s.
Чи можливо витягнути оригінальні зображення високої роздільної здатності з файлу Word або PowerPoint без втрати якості? Так; перейменуйте файл у .zip, відкрийте папку word/media або ppt/media, і ви знайдете оригінальні, не стиснені вихідні зображення точно такими, якими вони були вставлені.