Общие сведения о формате двоичных файлов Word MS-DOC
Обзор. Сведения о двоичном формате файлов MS-DOC, который используется в продуктах Microsoft Word прежних версий, включая базовые структуры и ключевые концепции для программного взаимодействия с ним.
Дата последнего изменения: 6 января 2012 г.
Применимо к: Office 2007 | Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word | Word 2007 | Word 2010
В этой статье
Общие сведения о двоичном формате файлов MS-DOC
Заключение
Дополнительные материалы
Дата публикации: февраль 2011 года
Автор: корпорация Майкрософт
Содержание
Общие сведения о двоичном формате файлов MS-DOC
Основные компоненты формата файлов MS-DOC
Извлечение текста из файлов Word
Заключение
Дополнительные материалы
В этой статье описывается структура файлов MS-DOC и некоторые процедуры по работе с ними. Данная статья входит в серию статей, посвященных двоичным форматам файлов, используемым продуктами Microsoft Office. Эти статьи следует использовать совместно с документами Office File Format Documents, опубликованными на сайте MSDN.
Общие сведения о двоичном формате файлов MS-DOC
В Microsoft Office Word 2003, Microsoft Word 2002, Microsoft Word 2000 и Microsoft Word 97 в качестве формата по умолчанию используется двоичный формат файлов MS-DOC. Этот формат имеют все файлы с расширением DOC или DOT. Базовой единицей измерения данных в документе Word является символ, к таким символам может относиться форматирование и другие невидимые символы, а также символы в кодировке ANSI и Юникод. Все данные о символах размещаются в потоке документа Word. В начале этого потока находится структура под названием блок файловой информации (File Information Block — FIB), которая содержит указатели на все данные в файле.
Примечание
Рекомендуемый способ выполнения большей части задач программирования в Microsoft Word заключается в использовании основных сборок взаимодействия Word. Это набор классов .NET, который предоставляет полную объектную модель для работы с Microsoft Word. В этой серии статей рассматриваются только расширенные сценарии, например такие, в которых продукт Microsoft Word не установлен.
Основные компоненты формата файлов MS-DOC
Ниже описаны наиболее важные структуры, о которых вам следует знать при работе с файлами DOC.
-
Поток документа Word — это основной поток в файле DOC, содержащий все данные файла, кроме таблиц, которые хранятся в 1Table stream or 0Table stream.
-
Блок файловой информации начинается со смещением 0x00 по отношению к потоку документа Word. Он указывает расположение всех остальных данных в файле. Эти расположения указываются посредством пары целых чисел, первое из которых указывает расположение, а второе — размер. Эти числа указываются в подструктурах блока файловой информации, таких как FibRgFcLcb97. Имена расположений снабжаются префиксом fc, а названия размеров — префиксом lcb.
Структура Clx
Структура Clx представляет собой массив из 0 или большего числа структур Prc, которые содержат сведения о свойствах, после чего идет структура Pcdt, содержащая структуру PlcPcd.
-
-
Символ может быть текстовым или нетекстовым, например знаком абзаца или привязкой объекта. Его размер может меняться в зависимости от того, относится ли он к кодировке ANSII, Юникод или является управляющим символом. Соседние символы в документе совершенно необязательно являются соседними в двоичном файле.
-
Позиция символа (CP) — это 32-разрядное целое число без знака, которое определяет расположение индекса символа в тексте документа.
Структура Pcd
Структура Pcd указывает положение текста в потоке документа Word, а также некоторые свойства текста.
-
-
Структура PLC представляет собой массив позиций символов, за которым следует массив элементов данных. Разные структуры Plc имеют разные имена и функции. Например, структура Plcbkf состоит из закладок и указателей на закладки.
Структура PlcPcd
Структура PlcPcd является структурой PLC, которая сопоставляет массив позиций символов со структурами Pcd. Другими словами, она сопоставляет позиции символов с символами в тексте документа.
Извлечение текста из файлов Word
Формальный алгоритм для извлечения текста приведен в документах об открытых спецификациях на сайте MSDN в подразделе 2.4.1 Retrieving Text, кроме того, в подразделе 3.1 Example of a Clx раздела с примерами приведен пример реализации части данной процедуры. Здесь описана упрощенная версия всего процесса.
Порядок извлечения текста из документа Word
Считайте файл DOC в поток данных.
Начните считывание блока файловой информации со смещения 0 потока документа Word. Дополнительные сведения см. в разделе 2.5.15 How to read the FIB.
Внутри блока файловой информации найдите структуру FibRgFcLcb97. Эта структура начинается с байта 54 блока файловой информации и состоит из последовательности 4-байтовых полей.
Считайте поле FibRgFcLcb97.fcClx по байту 268 и поле FibRgFcLcb97.lcbClx по байту 272. Они указывают смещение расположения и размер структуры Clx.
Начните считывать структуру Clx из потока таблицы со смещением, указанным в поле FibRgFcLcb97.fcClx.
Внутри структуры Clx найдите структуру Pcdt, которая идет сразу за массивом .RgPrc, имеющим переменный размер и состоящим из структур Prc.
Для каждого элемента этого массива выполните следующее:
Считайте атрибут .clxt, который является байтом 0 структуры Prc. Если .clxt = 0x02, значит вы нашли Pcdt.
Если .clxt = 0x01, считайте следующие два байта в качестве целого числа со знаком, а затем перейдите вперед на это число байт к следующему элементу массива.
Внутри структуры Pcdt найдите структуру PlcPcd, которая начинается с пятого байта структуры Pcdt.
Загрузите массив PlcPcd.aPcd и массив PlcPcd.aCp. Элементы этих массивов соотносятся друг с другом по значению индекса.
Для каждой структуры Pcd в PlcPcd.aPcd выполните следующее:
Считайте значение поля Pcd.Fc.fCompressed по биту 46 текущей структуры Pcd. Если получено значение 0, структура Pcd ссылается на 16-разрядный символ Юникода. Если получено значение 1, структура ссылается на 8-разрядный символ ANSI.
Считайте значение Pcd.Fc, которое соответствует байтам 2–5 текущей структуры Pcd, и соответствующее значение позиции символа.
В случае с Юникодом текст в позиции символа, указанной текущим значением позиции, начинается со смещением, которое равно значению Pcd.Fc в потоке документа Word, и занимает два байта на символ.
В случае с ANSI текст в текущей позиции символа начинается со смещением, которое равно половине значения Pcd.Fc и занимает один байт на символ.
В любом случае число символов, указанное текущей позицией символа, равно разности значений следующей позиции символа в массиве и текущей позиции символа.
Заключение
В этой статье приведен лишь пример формата MS-DOC. Указанные в данной статье средства позволят вам с легкостью овладеть восстановлением данных. После изучения дополнительных материалов вы сможете приступить к восстановлению сведений о форматировании и других метаданных, а затем перейди к операциям сохранения.
Дополнительные материалы
Для получения дополнительных сведения см. следующие ресурсы: