Внутренний формат документов MS WORD
Страница 7. Структура документа MS WORD


 

4. Структура документа MS WORD

  -... Он съедал десять тарелок супу...
- А на второе, - пятнадцать отбивных котлет...
- И, наконец,... двадцать компотов!...
- А потом этот человек подвязывал салфетку на грудь и говорил: "Ну, кажется, я заморил червячка, теперь, пожалуй, можно приступить к настоящему обеду!

Ларри Я.Л. Необыкновенные приключения Карика и Вали

Итак, мы подробно изучили с разных сторон множество действительно интересных вопросов, но... Следует признать, что основную тему статьи мы пока не раскрыли. В ближайшее же время попытаемся исправиться.

В Интернете можно найти немало ссылок на фирменные материалы "Microsoft Word 6.0 Binary File Format" и "Microsoft Word 97 Binary File Format", которые представляют собой огромные файлы, заполненные большим количеством малопонятных терминов, таблиц, списков и пр. Но название не совсем точно отражает действительность: на самом деле эти материалы описывают всего лишь структуру потока под названием "WordDocument". Продемонстрируем, что ничего совсем уж иррационального и трансцендентного в фирменной документации от Micrisoft нет.

Итак, поток "WordDocument" (в документации он называется "главным потоком" - main stream) начинается со своего собственного внутреннего заголовка, в котором мы упомянем всего несколько наиболее интересных для нас полей:

Смещение Длина Назначение Примечание
-----------------------------------------------
0h 2 Сигнатура Word6/Word97
2h 2 Код версии Word6/Word97
18h 4 Начало текста Word6/Word97
1Ch 4 Конец текста+1 Word6/Word97
34h 4 Длина текста+1 Word6
4Ch 4 Длина текста+1 Word97

Для документов, созданных в Word v6.0/7.0 или WordPad, сигнатура обычно равна 0A5DCh, а для Word97/2K/XP она равна 0A5ECh (все это верно по крайней мере для русских версий).

Если документ создан в MS WinWord, то текст обычно начинается по "круглым" смещениям (например, 200h или 300h), для прочих продуктов это не всегда выполняется (например, WordPad может разместить его по "треугольному" смещению 312h).

Текст для формата версий 6.0/7.0 представляет собой обычную последовательность однобайтовых символов в той или иной кодировке, а для более старших версий - в двухбайтовой кодировке UNICODE:

Символ Кодировка
-----------------
0-9 030h-039h
A-Z 041h-05Ah
a-z 061h-07Ah
А-Я 410h-42Fh
Ё 401h
а-я 430h-44Fh
ё 451h

Этой информации вполне достаточно, чтобы, например, извлечь из Word-документа текст. Производить обратную операцию несколько сложнее - для этого придется параллельно формировать таблицы описания свойств символов и абзацев.

 
« Предыдущая статья   Следующая статья »