Ostatnia aktualizacja: 10 września 2026

Jak działa kompresja wewnątrz EPUB, DOCX, XLSX i PPTX
Jeśli zmienisz nazwę pliku .docx, .xlsx, .pptx lub .epub na .zip i dwukrotnie klikniesz, dzieje się coś zaskakującego: nie pojawia się błąd. Twój system operacyjny otwiera go jako folder zawierający podkatalogi, pliki konfiguracyjne XML, arkusze stylów, czcionki i osadzone obrazy.
Nowoczesne architektury dokumentów porzuciły monolityczne binarne bloby już dekady temu. Zamiast nich, standardy branżowe — mianowicie Open Packaging Conventions (OPC) dla Microsoft Office oraz Open Container Format (OCF) dla EPUB — przyjęły zaskakująco elegancką podstawę: skromny archiwum ZIP.
Zrozumienie, jak kompresja działa w tych formatach, ujawnia, dlaczego nowoczesne dokumenty są tak odporne, lekkie i rozbudowywalne — oraz dlaczego niektóre pliki kompresują się o 90%, podczas gdy inne ledwo się kurczą.
1. Architektura kontenera: przebrane pakiety ZIP
Zanim zrozumiemy sam algorytm kompresji, warto pojąć, dlaczego nowoczesne formaty dokumentów są strukturyzowane jako pakiety, a nie jako samodzielne surowe pliki.
Problem z przestarzałymi formatami binarnymi
W latach 90. i na początku 2000 roku Microsoft Office używał własnych binarnych formatów (.doc, .xls, .ppt). Pliki te były w zasadzie zrzutami pamięci ustrukturyzowanymi wokół Compound File Binary Format (CFBF). Były notorycznie kruche:
- Jedno odwrócenie bitu mogło zepsuć całą strukturę pliku.
- Osadzanie obrazów powodowało nieprzewidywalny wzrost rozmiaru plików.
- Parsowanie wymagało inżynierii wstecznej gęstych specyfikacji binarnych.
- Współdziałanie międzyplatformowe było koszmarem.
Przejście na otwarte, modularne kontenery
W połowie lat 2000 dwie równoległe ewolucje miały miejsce:
- Office Open XML (OOXML / ISO/IEC 29500): Microsoft wprowadził formaty oparte na XML kończące się literą
x(DOCX, XLSX, PPTX). Pod maską te pliki stosują Open Packaging Conventions (OPC). - EPUB (IDPF / W3C): Publikacja cyfrowa odszedła od własnościowych formatów czytników w kierunku standardowych technologii internetowych (HTML, CSS, SVG) pakowanych w EPUB Open Container Format (OCF).
Obie architektury opierają się na standardowej specyfikacji PKZIP 2.0 / ZIP. Rozszerzenie pliku po prostu określa oczekiwany schemat, domyślną aplikację przeglądającą oraz deklaracje typu MIME.
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. Silnik pod maską: algorytm DEFLATE
Kiedy aplikacja zapisuje plik DOCX lub EPUB, nie po prostu umieszcza pliki w niekompresowanym archiwum. Kompresuje wewnętrzne zasoby przy użyciu DEFLATE (określonego w RFC 1951).
DEFLATE to dwuwarstwowy system bezstratnej kompresji łączący dwa podstawowe algorytmy informatyczne:
Krok 1: LZ77 (Lempel-Ziv 1977) — usuwanie redundancji przy użyciu okna przesuwnego
XML i HTML są niezwykle rozwlekłe. Zastanów się, jak często tagi pojawiają się w standardowym pliku document.xml lub chapter1.xhtml:
<w:p><w:r><w:rPr><w:sz w:val=\"24\"/></w:rPr><w:t>powtarza się tysiące razy w Wordzie.row r="1" spans="1:15"><c r="A1" t="s"><v>powtarza się w Excelu w dziesiątkach tysięcy komórek.<p class="calibre1"><span class="body-text">powtarza się w rozdziałach książek EPUB.
LZ77 skanuje strumień danych przy użyciu przesuwającego się okna słownika (zazwyczaj 32 KB). Gdy napotyka ciąg znaków, który widział niedawno, zastępuje powielony tekst małym wskaźnikiem wstecznym:
(distance, length)— np. “cofnij się o 142 bajty, skopiuj 28 bajtów”.
Zamiast przechowywać rozbudowane znaczniki wielokrotnie, LZ77 kompresuje tysiące powtarzających się tagów XML do zwartych odniesień współrzędnych.
Krok 2: Kodowanie Huffmana — kodowanie częstotliwości o zmiennej długości
Po tym, jak LZ77 zamienia redundantne sekwencje na tokeny długość‑odległość, kodowanie Huffmana analizuje częstotliwość każdego symbolu w strumieniu:
- Często występujące symbole (takie jak popularne znaki
e,t, spacje lub typowe znaczniki odległości) otrzymują krótkie binarne kody bitowe (np. od 2 do 4 bitów). - Rzadko używane symbole otrzymują dłuższe binarne kody bitowe (np. od 12 do 16 bitów).
Wynik to strumień kodów bitowych o zmiennej długości, które kompresują zwykły tekst XML o 75% do 88%.
3. Analiza format po formacie: jak każdy radzi sobie ze sprężaniem
Choć DOCX, XLSX, PPTX i EPUB używają tego samego kontenera ZIP, ich wewnętrzne cechy danych różnią się diametralnie.
A. DOCX: równowaga między tekstem a stylizacją
- Co znajduje się w środku: Zwykły XML (
word/document.xml), tabele czcionek, style, katalogi relacji oraz folderword/media/. - Jak działa kompresja:
- Surowy tekst i znacznikowanie XML osiągają ogromne współczynniki kompresji (często zmniejszając się z 5 MB surowego XML do 500 KB).
- Jednak nowoczesne dokumenty często zawierają zrzuty ekranu, ilustracje i zdjęcia. Ponieważ pliki JPEG i PNG są już skompresowane, DEFLATE nie może ich dalej zmniejszyć. W rzeczywistości zastosowanie DEFLATE do już skompresowanego obrazu przynosi praktycznie 0 % oszczędności (a może nawet nieco zwiększyć rozmiar ze względu na nagłówki kompresji).
- W konsekwencji pliki DOCX bez obrazów są wyjątkowo małe, podczas gdy raporty z dużą ilością obrazów mają rozmiar prawie równy sumie rozmiarów zawartych w nich plików graficznych.
B. XLSX: Dane numeryczne o dużej objętości i współdzielone ciągi znaków
Arkusze kalkulacyjne stanowią wyjątkowe wyzwanie: arkusz może zawierać setki tysięcy wierszy, co prowadzi do astronomicznych rozmiarów plików XML, jeśli nie zostanie to odpowiednio zoptymalizowane.
- Strategia współdzielonych ciągów (
xl/sharedStrings.xml):- Jeśli etykieta tekstowa, taka jak “United States” lub “In Progress”, pojawia się 50 000 razy w arkuszu kalkulacyjnym, przechowywanie
<c t="inlineStr"><is><t>United States</t></is></c>w 50 000 komórkach spowodowałoby rozrost nieskompresowanego XML do gigabajtów. - Excel usuwa duplikaty tekstu przed kompresją, przechowując każdy unikalny ciąg raz w tabeli współdzielonych ciągów i odwołując się do niego za pomocą indeksu numerycznego (np.
<v>0</v>,<v>1</v>).
- Jeśli etykieta tekstowa, taka jak “United States” lub “In Progress”, pojawia się 50 000 razy w arkuszu kalkulacyjnym, przechowywanie
- Dlaczego plik XLSX kompresuje się dramatycznie:
- Numeryczne rekordy wierszy (
sheet1.xml) mają powtarzalną, przewidywalną składnię. - DEFLATE łatwo wykrywa powtarzające się wzorce w tabelarycznym XML. Typowe jest, że surowy plik
sheet1.xmlo wielkości 120 MB kurczy się do mniej niż 6 MB w archiwum XLSX.
- Numeryczne rekordy wierszy (
C. PPTX: Zestawy slajdów z dużą ilością mediów
Prezentacje różnią się zasadniczo od dokumentów i arkuszy kalkulacyjnych:
- Dylemat obrazu: Pliki PPTX są zazwyczaj zdominowane przez kształty wektorowe, grafiki tła, klipy wideo i slajdy wysokiej rozdzielczości.
- Profil kompresji: Podczas gdy
ppt/slides/slide1.xmldoslideN.xmlkompresują się efektywnie, ładunek multimedialny (ppt/media/) stanowi od 85% do 95% całkowitej wagi archiwum. - Dlaczego ponowne spakowanie PPTX nie zmienia niczego: Jeśli spróbujesz skompresować już zapisany plik PPTX przy użyciu 7-Zip lub WinRAR, zauważysz prawie brak zmniejszenia rozmiaru. Dzieje się tak, ponieważ wnętrze jest już archiwum ZIP skompresowanym metodą DEFLATE, zawierającym wstępnie skompresowane pliki JPEG i MP4, a entropia jest już bliska maksymalnej.
D. EPUB: Technologie internetowe z obowiązkowym nieskompresowanym nagłówkiem
Plik EPUB jest zasadniczo responsywną, spakowaną mikro‑stroną zawierającą rozdziały w formacie XHTML, arkusze stylów CSS, czcionki TTF/WOFF oraz metadane. Jednak EPUB ma jedną ścisłą zasadę pakowania, która odróżnia go od plików 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
- Magiczny plik
mimetype:- Czytniki e‑booków muszą natychmiast rozpoznać plik EPUB, bez konieczności rozpakowywania całego archiwum lub uruchamiania procesów dekompresji.
- Format Otwarty Kontenera (OCF) wymaga, aby plik
mimetype:- Był pierwszym plikiem w archiwum ZIP.
- Musi zawierać dokładnie ciąg
application/epub+zip. - Nie może być kompresowane (metoda kompresji ZIP
0/ “Stored”). - Musi nie zawierać dodatkowych danych pola, zapewniając, że ciąg MIME zawsze zaczyna się od bajtu 38 pliku fizycznego.
- Kompresja tekstu: Wszystkie pozostałe pliki (
.xhtml,.css,.opf) są kompresowane przy użyciu standardowego DEFLATE (metoda ZIP8), co pozwala pełnym powieściom zmniejszyć się do kilku setek kilobajtów.
4. Porównanie kompresji w różnych formatach
| Format | Główna zawartość | Podstawowe źródło redundancji | Typowy współczynnik kompresji (tekst/znaczniki) | Obsługa mediów |
|---|---|---|---|---|
| DOCX | WordprocessingML (document.xml) | Powtarzalne tagi XML akapitu/uruchomienia | 75% – 85% | Przechowywane w word/media/ (głównie wstępnie skompresowane) |
| XLSX | SpreadsheetML (sheet*.xml) | Powtarzalne tagi komórek/wierszy; Wspólne ciągi znaków | 80% – 92% | Rzadkie; obrazy/wykresy w xl/media/ |
| PPTX | PresentationML (slide*.xml) | Metadane układu slajdu, współrzędne kształtów | 70% – 80% | Duży ppt/media/ ładunek ogranicza ogólne oszczędności |
| EPUB | XHTML, CSS, OPF, NCX | Tagi HTML, powtarzalne selektory CSS | 65% – 80% | mimetype nieskompresowany; media w podfolderach |
5. Praktyczne wnioski: Jak optymalizować dokumenty
Ponieważ teraz wiesz, jak działa wewnętrzne pakowanie, możesz wykorzystać mechanizmy kompresji do rozwiązywania rzeczywistych problemów:
- Naprawianie uszkodzonych dokumentów:
Jeśli dokument odmawia otwarcia, zmiana rozszerzenia na
.zippozwala wyodrębnić zawartość i odzyskać surowy tekst zdocument.xmllub poszczególne rozdziały z katalogutext/EPUB-a. - Zmniejszanie gigantycznych plików Office:
Ponieważ kompresja XML jest już zoptymalizowana, ogromne pliki prawie zawsze są spowodowane nieoptymalizowanymi obrazami w
media/. Zamiast używać zewnętrznych kompresorów PDF lub DOCX, otwórz kontener ZIP, wyodrębnij obrazy, przetwórz je za pomocą optymalizatora obrazów (takiego jak WebP, TinyPNG lub MozJPEG) i zamień je w archiwum. - Automatyzacja generowania dokumentów: Programiści nie potrzebują ciężkich pakietów biurowych do tworzenia raportów. Możesz generować surowe szablony XML, pakować je przy użyciu standardowych bibliotek zlib/ZIP i programowo generować prawidłowe pliki DOCX lub XLSX w ciągu kilku milisekund.
6. Najczęściej zadawane pytania (FAQ)
Czy mogę przekonwertować plik DOCX lub EPUB na ZIP, po prostu zmieniając rozszerzenie pliku? Tak; zmiana rozszerzenia na .zip pozwala dowolnemu standardowemu narzędziu archiwizującemu (takim jak 7-Zip, macOS Archive Utility lub Windows Explorer) otworzyć i bezpośrednio przeglądać wewnętrzne pliki.
Dlaczego kompresowanie pliku DOCX lub PPTX przy użyciu 7-Zip nie powoduje zauważalnego zmniejszenia rozmiaru? Ponieważ plik jest już wewnętrznie skompresowanym archiwum ZIP zawierającym XML zakodowany algorytmem DEFLATE oraz wstępnie skompresowane obrazy, pozostawiając minimalną redundancję do usunięcia przez zewnętrzne narzędzie.
Dlaczego specyfikacja EPUB wymaga, aby plik mimetype był nieskompresowany? Umożliwia to oprogramowaniu czytnika e-booków zweryfikowanie, że plik jest autentycznym EPUB, sprawdzając ciąg MIME pod stałym offsetem bajtowym, bez konieczności uruchamiania silnika dekompresji.
Czy zmiana formatowania komórek w Excelu zwiększa rozmiar skompresowanego pliku XLSX? Tak; rozbudowane formatowanie niestandardowe przerywa jednolitą powtarzalność wzorców w komórkach, tworząc dłuższe definicje XML, które zmniejszają efektywność kompresji DEFLATE.
Czy można wyodrębnić wysokiej rozdzielczości oryginalne obrazy z pliku Word lub PowerPoint bez utraty jakości? Tak; zmień nazwę pliku na .zip, otwórz folder word/media lub ppt/media, a znajdziesz oryginalne, nieskompresowane obrazy dokładnie takie, jakie zostały wstawione.