Вы находитесь на странице: 1из 19

МИНИСТЕРСТВО ОРАЗОВАНИЯ И НАУКИ РФ

ФГБОУ ВПО “УДМУРТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ”


МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ
КАФЕДРА ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ

РЕФЕРАТ НА ТЕМУ
ФАЙЛ С РАСШИРЕНИЕМ .DOCX

ВЫПОЛНИЛ: СТУДЕНТ ГР. ОМ-010200-21


ТЮНИНА ИРИНА АНДРЕЕВНА
ПРОВЕРИЛ:
БАННИКОВ АЛЕКСАНДР СЕРГЕЕВИЧ
ИЖЕВСК 2013
Оглавление

Введение
1. Общий обзор формата Office 2007 Open XML Format
1.1 Контейнер
1.2 Части документа
1.3 Реляционные элементы
1.4 Типизованные элементы
1.5 Встроенные объекты
2. Содержимое файла
2.1 Детали реализации
2.2 Программные интерфейсы
2.3 Сценарии использования документов в XML-формате
3. Программы, которыми можно открыть файл .DOCX
Введение

Файл с расширением .DOCX - документ, созданный Microsoft Word,


программой обработки текста. Содержит текст документа, изображений,
форматирование, стили, нарисованные объекты и другие параметры
документа.
В отличие от файлов .DOC <http://fileext.ru/doc>, которые хранят
данные документа в одном бинарном файле, файлы DOCX создаются с
помощью открытого формата XML, в котором хранятся документы, как
собрание отдельных файлов и папок в сжатом пакете. DOCX-файлы содержат
XML-файлы и три папки, docProps, Word, и _rels, которые содержат свойства
документа, содержание и отношения между файлами.
.DOCX файлы разработаны, чтобы сделать содержимое документов
доступным. Например, текстовый документ сохраняется с помощью простых
текстовых файлов и изображений документов, хранятся в виде отдельных
файлов изображения для одного файла .DOCX.
Файлы DOCX могут быть открыты в Word 2007 или в более поздней
версии в ОС Windows, или в Word 2008 или в более поздней версии для Mac
OS X. Они также могут быть открыты в более ранних версиях Word для ОС
Mac или ОС Windows через поддержку документов Open XML. Для этого
необходимо установить пакет обеспечения совместимости Microsoft Office
для форматов файлов Word, Excel и PowerPoint.
<http://www.microsoft.com/downloads/ru-ru/details.aspx?familyid=941b3470-
3ae9-4aee-8f43-c6bb74cd1466&displaylang=ru> Установив этот пакет, можно в
Microsoft Office 2000, Office XP или Office 2003 открывать файлы созданные
в Microsoft Office 2007 (docx, xlsx, pptx).

1.
Общий обзор формата Office 2007 Open XML Format

Начнем обсуждение Office 2007 Open XML Format с рассмотрения


общих характеристик этого формата. Затем в следующем разделе мы
обратимся к более подробному рассмотрению деталей сохранения
документов, создаваемых таким приложением Microsoft Office 2007, как Word
2007.

.1 Контейнер

формат, используемый в Microsoft Office 2007, представляет собой ZIP-


архив - контейнер, который называется package и в котором помещаются
различные компоненты документа, называемые частями (part) и элементами
(item). Части являются фрагментами документа и отвечают за его
содержимое, элементы представляют собой метаданные, описывающие то,
каким образом части должны быть собраны вместе и отображены. Элементы
можно разделить на два типа: реляционные (relationship items), описывающие
взаимоотношения между частями и типизованные (content-type items), задача
которых - дать описание содержимого каждой части документа. Реляционные
элементы, в свою очередь, подразделяются на элементы, описывающие
взаимоотношения контейнеров, и элементы, задающие взаимоотношения
между частями документа.
.2 Части документа

Каждый документ содержит так называемую главную часть - все


остальные элементы либо располагаются внутри этой главной части, либо так
или иначе привязаны к ней. В зависимости от типа файла (текстовый
документ, электронная таблица, презентация) главная часть может называться
по-разному. Например:

Не все части документа сохраняются в XML-формате. Например,


графические изображения (*.png, *.jpg, *.tiff) хранятся в оригинальном
формате, что делает более удобным доступ к ним и выполнение
соответствующих манипуляций. Помимо этого в бинарном виде хранятся
VBA-проекты и внедренные в документы OLE-объекты. Части документа,
сохраняемые в XML-формате, соответствуют схемам, определенным для того
или иного фрагмента документа.

.3 Реляционные элементы

Как мы увидели выше, для каждого типа документа главная часть


располагается в соответствующей папке контейнера и имеет собственное
название.
Реляционный элемент с именем officeDocument (схема
<http://schemas.microsoft.com>/office/2006/relationships/officeDocument)
позволяет обнаружить главную часть любого документа - он хранится в
файле с расширением *.rels в папке _rels. Файл *.rels содержит описание
взаимоотношений фрагментов документа в следующем формате:

<Relationship Id=”relId” Type=”relationshipType”, Target = “target Part” />

где:
 Id - строковый идентификатор взаимоотношения, который должен
иметь уникальное в рамках файла имя;
 Type - описывает тип взаимоотношения, указывает на схему,
которая определяет тип для данного формата
 Target - указывает на папку и файл, в которых располагается
описываемый фрагмент документа.
Папка _rels имеет ключевое значение для всего процесса сохранения
офисных документов в формате XML. Взаимоотношения между частями
документа всегда задаются именно в этой папке. Упомянутое выше
взаимоотношение officeDocument является взаимоотношением на уровне
контейнера - другими словами, оно описывает весь контейнер и потому
хранится в папке _rels в корне контейнера. Если же требуется найти описание
взаимоотношений между частями документа, то в случае Microsoft Word 2007
его следует искать в файле document.xml - он будет находиться в подкаталоге
word каталога _rels. Итеративный просмотр содержимого этого файла
позволит обнаружить все части документа и взаимоотношения между ними.
.4 Типизованные элементы

Как было уже отмечено выше, типизованные элементы содержат


метаданные, описывающие файловый тип каждой части документа. К частям
документа могут относиться простой текст (text/plain), графическое
изображение (image/jpeg) или более абстрактные понятия, например XML-
документ (application/xml). Реляционные элементы также имеют
соответствующие типизованные элементы, служащие для описания
взаимоотношений. Множество типизованных элементов позволяет
потребителям XML-файлов получить представление не только о его
содержимом, но и о том, как интерпретировать и отрисовывать отдельные
части документа.
Типизованные элементы хранятся вместе, в одном элементе с именем
[Content_Types].xml в корневой папке контейнера. Типизованный элемент по
умолчанию обычно ассоциируется с расширением имени файла, например
*.xml или *.jpg. Типизованный элемент override может указывать на то, что
данный фрагмент имеет указанный тип независимо от расширения имени
файла.

.5 Встроенные объекты

office документ файл


Формат Office Open XML может включать любое число встроенных
объектов, которые могут принадлежать к любому типу. Эта возможность,
пришедшая на смену неэффективному кодированию Base64, которое
использовалось в предыдущих версиях продукта, сделала файлы более
гибкими и удобными для обработки.
Например, вставка графического изображения в документ Word 2007
приведет к появлению в контейнере следующих элементов:
 в файл [Content_Types).xml будет добавлено описание типа,
связывающего расширение файла *.jpg с to image/jpeg;
 папка media, созданная в папке word, будет содержать копию
вставленного в документ графического изображения;
 в файле document.xml, который находится в папке word, будет
вставлена ссылка на новое взаимоотношение;
 в файле document.xml.rels (находящийся в папке word) будет
добавлено новое взаимоотношение, которое будет ссылаться на
соответствующий элемент в файле document.xml.

2.
Содержимое файла

2.1 Детали реализации

Рассмотрим, как описанный выше XML-формат используется при


сохранении документов, создаваемых приложением Microsoft Office 2007,а
именно к Word 2007.
Начнем с простого текстового документа, созданного с помощью Word
2007. На рис. 1 показано, как этот документ выглядит в редакторе.

Рис. 1. Документ, созданный средствами Word 2007

Сохраненный документ имеет расширение *.docx и представляет собой


ZIP-контейнер, который мы можем исследовать с помощью любой
программы, позволяющей работать с ZIP-архивами. В качестве примера
будем использовать программу WinZip. Ниже показана структура docx-файла,
открытого в WinZip (рис. 2).
Рис. 2. Структура docx-файла

В файле [Content_Types).xml описаны все типизованные элементы,


связанные с данным документом. Все типизованные элементы, уникальные
для Word 2007, имеют префикс application/vnd.ms-word. Если типизованный
элемент соответствует XML-файлу, то в конец URI добавляется «+xml».
Типичными для Word 2007 типизованными элементами являются:
 application/vnd.ms-word.comments+xml - содержит комментарии в
формате XML;
 application/vnd.ms-package.core-properties+xml - содержит
свойства документа в формате XML;
 image/png - графическое изображение в оригинальном формате.
Поскольку имеется возможность изменения имени любого фрагмента
документа, в файле [Content_Types).xml описаны и ссылки на такие
фрагменты. Например, вот как указывается местоположение таблицы
шрифтов:
<Override PartName=”/word/fontTable.xml”
<ContentType=”application/vnd.openxmlformats-
officedocument.wordprocessingml.fontTable+xml” />
Взаимоотношения между частями документа всегда располагаются в
каталоге _rels. Для конкретного документа взаимоотношения описываются в
файле document.xml.rels. Например:
<Relationships xmlns=”http://schemas.openxmlformats.org/package/2006/
relationships”>
<Relationship
Id=”rId8"Type=http://schemas.openxmlformats.org/officeDocument/2006/relations
hips/footerTarget=”footer1.xml”/>
Здесь задается связь между схемой, описывающей нижний колонтитул
документа, и файлом footer1.xml, в котором содержится сам колонтитул.
Более подробно прочитать о структуре XML-файла Word 2007 можно в
документе «Walkthrough: Office 12 Word Open XML File Format», доступном
на сайте MSDN.

2.2 Программные интерфейсы

Для работы с документами, сохраненными в формате Office 2007 Open


XML Format, следует использовать классы, реализованные в пространстве
имен System.IO.Packaging (библиотека WinFX, сборка windowsbase.dll).
Подробное описание данного пространства имен можно получить в
онлайновой версии документации к библиотеке WinFX, расположенной по
адресу:<http://windowssdk.msdn.microsoft.com/library/en-
us/cpref12/html/N_System_IO_Packaging.asp>.
Рассмотрим несколько примеров. Мы уже отмечали, что для успешной
обработки документа в формате Office 2007 Open XML Format необходимо
успешно найти главную часть документа, которая имеет тип
http://schemas.microsoft.com/office/2006/relationships/officeDocument. Для
документов, созданных средствами Word, главная часть хранится в файле
document.xml. После того как главная часть документа найдена, мы получаем
возможность обнаружить все остальные части документа. В приведенном
примере показано, как найти главную часть (documentPart) офисного
документа.

//
// Найти «главную часть» документа по заданному имени
файла
,,void FindStartPart(string fileName)
{officeDocRelType =
@”http://schemas.microsoft.com/office/2006//officeDocument”;documentPa
rt = null;
Uri documentUri = null;
//Открыть контейнер только для чтения
using (Package officePackage = Package.(fileName,.Open,
FileAccess.Read))
{
// Найти «главную часть»(PackageRelationship relationship
in.GetRelationshipsByType(office-
DocRelType))
{
// В контейнере только одна «главная часть»
documentUri = PackUriHelper.ResolvePartUri
(new Uri(“/”, UriKind.Relative), relationship.);=
officePackage.GetPart(documentUri);
break;
}
// Дальнейшая обработка
}
}

После того как извлекатьли главную часть документа, можно найти


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

//
// Найти комментарии в документе
//commentsPartRelType =
@”http://schemas.microsoft.com/office/2006/
relationships/wordComments”;commentsPart = null;
Stream commentsXML = null;
//
//Итерация по всем взаимоотношениям в document.xml
//(PackageRelationship relationship
in.GetRelationshipsByType(comments-))
{
//Комментарии = /word/comments.xmlcommentsUri =
PackUriHelper.ResolvePartUri
(documentUri,.TargetUri);= officePackage.GetPart(commentsUri);
break;
}

В приведенном примере мы использовали URI для нахождения адреса


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

public void DeleteVBAPart(string fileName)


{officeDocRelType =
@”http://schemas.microsoft.com/office/2006//”;string vbaRelationshipType
=
“http://schemas.microsoft.com/office/2006//vbaProject”;documentPart =
null;
Uri documentUri = null;
//
// Открыть контейнер на чтение
//(Package officePackage = Package.Open
(fileName, FileMode.Open, FileAccess.ReadWrite))
{
// Получить «главную часть»(PackageRelationship relationship
in.GetRelationshipsByType
(officeDocRelType))
{= PackUriHelper.ResolvePartUri(new(“/”, UriKind.Relative),
relationship.);= officePackage.GetPart(documentUri);;
}
// Найти VBA project(System.IO.Packaging.PackageRelation-
relationshipdocumentPart.GetRelationshipsByType
(vbaRelationshipType))
{vbaUri = PackUriHelper.ResolvePartUri
(documentUri,.TargetUri);vbaPart = officePackage.GetPart
(vbaUri);
// Удалить VBA project.DeletePart(vbaUri);
// Удалить ссылку на VBA.DeleteRelationship
(relationship.Id);;
}
// Закрыть контейнер.Close();
}
}
Приведенные примеры помогут вам составить общее представление о
том, как использовать классы System.IO.Packaging для работы с документами
в формате Office 2007 Open XML Format. В ближайшее время Microsoft
планирует опубликовать значительное число примеров использования этого
программного интерфейса - следите за новинками на сайте MSDN
(<http://msdn.microsoft.com/>).

.3 Сценарии использования документов в XML-формате

Возможность манипуляции частями офисных документов либо


посредством редакторов XML-файлов, либо через вышеупомянутые
программные интерфейсы открывает перед разработчиками ряд новых
сценариев. К новым сценариям можно отнести следующие:
 обмен данными - открытость формата офисных документов
делает их полноценными участниками бизнес-процессов - появляется
возможность извлечения или вставки данных в документы, персонализации
документов при их рассылке конечным потребителям, использования
настраиваемых схем и т.п.;
 управление содержимым документов - у разработчиков
появляется возможность редактирования содержимого документов:
обновления данных, изменения отдельных частей документа, удаления или
добавления новых частей;
 повторное использование фрагментов документов - модульность
нового формата офисных документов позволяет повторно задействовать
фрагменты документов - использовать их как строительные блоки для
создания новых документов;
 сборка документов на лету - у разработчиков появляется
возможность создания офисных документов на лету, как используя готовые
части документов (например, отдельные слайды), так и полностью генерируя
документы с нуля путем реализации серверных сценариев, недоступных для
более ранних версий Office;
 обеспечение безопасности - возможность манипуляции VBA-
проектами внутри офисных документов делает их более безопасными.
Простое изменение расширения имени файла гарантирует, что макросы,
расположенные внутри документа, не будут выполняться. Помимо этого
открытость офисных документов делает более простой работу антивирусных
приложений и всевозможных сканеров;
 управление конфиденциальной информацией - открытость
офисных документов упрощает управление конфиденциальной информацией,
позволяя динамически создавать версии документов, не содержащие
информацию для служебного пользования, и таким образом значительно
сокращая затраты на создание документов, предназначенных для сторонних
клиентов

3.
Программы, которыми можно открыть файл .DOCX

MacOS Microsoft Word 2010 <http://www.microsoftstore.com/servlet/ControllerServlet?


Action=DisplayProductDetailsPage&Env=BASE&SiteID=msstore&Locale=en_US&productID=216537400&Click
ID=cknwlqkl7ss4zk7wialxns4q4inpkqwpazzk&p1=14e8918f00c51fe378640c9c34a19ea7&p2=551&p3=CD94176
&p4=49>
Apple Pages 4.1 <http://itunes.apple.com/us/app/pages/id409201541?mt=12&ign-mpt=uo%3D4>
Planamesa NeoOffice <http://www.neooffice.org/neojava/en/index.php>
OpenOffice.org <http://www.openoffice.org/>
Hancom ThinkFree Office Write <http://product.thinkfree.com/office/write>
Panergy docXConverter <http://www.panergy-software.com/products/docxconverter/index.html>
LibreOffice <http://www.libreoffice.org/>
Apple Preview <http://support.apple.com/kb/ht2506>

Windows Microsoft Word 2010 <http://www.microsoftstore.com/servlet/ControllerServlet?


Action=DisplayProductDetailsPage&Env=BASE&SiteID=msstore&Locale=en_US&productID=216673800&Click
ID=al9prnpkatwr9sytkkktkzplnrvyr55npllr&p1=5da17a08261d4e200020ca5719e1bb7a&p2=551&p3=CD94176&p
4=49>
Microsoft Word Viewer <http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=4>
Corel WordPerfect Office X5
<http://www.corel.com/corel/product/index.jsp;jsessionid=Nw5GyW3dahGqQTWQHTrX4g**.prd-atg-
commerce6?&trkid=CJ&1=1&storeKey=us&trkoi_trkid=CJ&mapcounter=1&pid=prod3670083>
OpenOffice.org <http://www.openoffice.org/>
OxygenOffice Professional <http://sourceforge.net/projects/ooop/>
Hancom ThinkFree Office Write <http://product.thinkfree.com/office/write>
Panergy docXConverter <http://www.panergy-software.com/products/docxconverter/index.html>
NativeWinds Docx2Rtf <http://www.nativewindsofmontana.com/software/docx2rtf.html>
LibreOffice <http://www.libreoffice.org/>

Linux OpenOffice.org <http://www.openoffice.org/>


OxygenOffice Professional <http://sourceforge.net/projects/ooop/>
Hancom ThinkFree Office Write <http://product.thinkfree.com/office/write>
LibreOffice <http://www.libreoffice.org/>