Файл word это архив

Я понимаю, вы сейчас скажете — «Ну, Артем, опомнился!… Баян!… Этой новости сто лет в обед!… Кто же этого не знает?…», но для меня это действительно стало открытием. Причем весьма неожиданным.

Дело в том, что по своей программерской надобности, мне нужно было на лету сгенерировать файл Microsoft Word 2007. Если кто знаком с программированием, то знает, что раньше, в старых версиях, это делалось либо вызовом ActiveX-COM объекта, или требовало наличия установленного Офиса с нелегальным открытием Word-а в скрытом режиме, генерации необходимого текста, сохранении файла и закрытии Word-а.

Если вы не просто знакомы с программированием, а на самом деле проделывали подобные штуки, то наверняка помните, сколько геморроя приходится хапать при этом увлекательном процессе вызова Микрософтовских Interop-объектов, которые например пишут, что убиваются из памяти, а на самом деле совсем не убиваются и продолжают висеть, вызывая memory leak-и, непонятные глюки и прочие занимательные пляски вокруг монитора. Особенно все это приятно проделывать если у вас не обычная десктопная программа, а Интернет-приложение, web-service или чего-то еще.

И даже если вы не знакомы с программированием и с компьютером

на «Вы» на «Ты»

на «Шо?», наверняка замечали, что с недавних пор офисные документы вместо привычных форматов .doc и .xls стали приходить с незнакомыми расширениями .docx и .xlsx, которые не открываются нормальным Офисом, а обязательно требуют наличия нового Microsoft Office 2007 (это который с корявым интерфейсом, без привычного меню и с непонятными иконками).

Что делать, если в письме пришел файл в формате .docx, а Microsoft Office 2007 на компьютере не установлен? Ну, в принципе, можно скачать в Интернете всякие бесплатные перекодировщики, утилиты и так далее. Но все оказалось гораздо проще.

Файл с расширением .docx (Word 2007) или .xlsx (Excel 2007) это обычный zip-архив. Т.е. его можно без всяких проблем переименовать из .docx в .zip, наплевав на строгие предупреждения Виндовза, что «ай-ай-ай, что же вы делаете, ему же больно!», и открыть стандартным архиватором типа WinRar, WinZip (если я не ошибаюсь, начиная с версии Vista, винда может открыть архивы zip и стандартным проводником).

В архиве вы увидите несколько папок, по которым разложено содержание вашего документа, все картинки из текста в одной папке, сам текст в другой, шаблоны в третьей и так далее.
Это, кстати, еще и удобный способ быстро выдрать картинки из большого документа, даже если у вас есть возможность его открыть самим Word-ом.

Правда текст лежит не в привычном формате .txt, а в формате .xml (если быть точнее Open XML), но его легко можно открыть любым текстовым редактором (тем же Notepad.exe) или Internet Explorer-ом. Документ вполне можно прочесть и даже перетащить параграфы через копирование в буфер куда-нибудь в более доступный редактор.

Если же вернуться к к вопросу программной генерации файлов Word или Excel на лету, то теперь, оказывается, нет даже необходимости в наличии установленного на компьютере Офиса. Что в западных странах означает — нет нужды еще в одной лицензии, предназначенной не для пользования человеком, а для компьютерной программы, что вообще само по себе — нонсенс.

Просто сгенерировал нужный текст и сохранил его (хотя бы даже как текстовый файл — построчно) в виде .xml, потом положил все файлы в нужном порядке в нужные папки, зазиповал их используя какой-нибудь бесплатный dll-зиповщик, например ICSharpCode.SharpZipLib (гуглится) и переименовал получившийся файл в .docx

Все.

Приветствую!

Файлы с расширением DOC относятся к документам, создающимся и открывающимся через редактор Microsoft Word (или его бесплатные альтернативы). В этих файлах помимо текста, может содержаться и другой контент, к примеру, графические изображения.

И чтобы получить быстрый доступ ко всему этому контенту, можно прибегнуть к процедуре распаковки DOC файла. Этим мы и займёмся, подробно описывая каждый шаг, который в итоге поможет нам получить желаемое.

Image

Файл DOC по своей структуре представляет архив формата zip, в котором в обязательном порядке содержатся xml файлы. В этих файлах содержится текст документа, описание применённых к нему шрифтов, стилей и т.п. Также, если в документ вставлен мультимедиа контент, то он также располагается в файле.

И раз это архив, то он может быть открыт в любом поддерживающем zip формат архиваторе. К слову сказать, сама операционная система Windows также поддерживает архивы в формате zip, так что сторонний софт можно не использовать вовсе.

Image

И так, откроем DOC (DOCX) файл как архив, получив к находящимся там файлам.

  1. Операционная система соотносит тип файла с программой, в которой её надо открыть, по имеющемуся у файла расширению. По умолчанию, расширения у большинства файлов скрыты, дабы включить их показ, необходимо переключить опцию в настойках операционной системы. Более подробно об этом в материале «Как включить показ расширений у файлов в Windows 7, 8, 8.1, 10».
  2. Включив показ расширений файлов, необходимо переименовать интересующий нас файл документа. Для этого надо навести на файл мышку, кликнуть правой клавишей и выбрать пункт Переименовать.

    Переименовываем файл Word документа

    Стерев расширение doс или docx, необходимо вписать за место него zip и сохранить.

    Image

    Меняем расширение у файла

  3. Теперь файл документа стал определяться в операционной системе как архив. Вы можете открыть его как с помощью имеющегося инструмента в Windows, так и с помощью популярного архиватора.

    Переименованный Word документ теперь определяется как архив

  4. Сделав это, вы увидите имеющиеся файлы в документе. Сможете их быстро посмотреть, и при необходимости скопировать.

    Просматриваем и распаковываем файлы, что содержатся в Word документе

    На этом всё.

Стоит сказать, что не все DOC или DOCX файлы могут быть распакованы таким образом. К примеру, запароленные Word документы шифруются и не могут быть распакованы описываемым способом.

Пожертвование сайту IT-Actual.ru (cбор пожертвований осуществляется через сервис «ЮMoney»)

На что пойдут пожертвования реквизиты других платёжных систем

Привет.

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

Номер банковской карты: 5331 5721 0220 5546
Кошелёк ЮMoney: 410015361853797
Кошелёк WebMoney: Z812646225287
PayPal: paypal@it-actual.ru
BitCoin: 1DZUZnSdcN6F4YKhf4BcArfQK8vQaRiA93

Оказавшие помощь:
Сергей И. — 500руб
<аноним> — 468руб
<аноним> — 294руб
Мария М. — 300руб
Валерий С. — 420руб
<аноним> — 600руб
Полина В. — 240руб

Деньги пойдут на оплату хостинга, продление домена, администрирование и развитие ресурса. Спасибо.
С уважением, создатель сайта IT-Actual.ru

Архивация

Назначение программ архивирования

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

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

В персональных компьютерах имеются две основные возможности сохранения
данных:

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

         
архивация данных –
самый простой способ сохранения данных. Он не имеет периодичности копирования
на носитель  и позволяет сохранять не промежуточные копии, а конечные
результаты работы. Архивация не спасает от сбоев сети, программ и оборудования,
поэтому должна сопровождаться мерами для промежуточного сохранения информации.

Для резервирования и архивации данных применяется сжатие данных,
которое представляет собой уменьшение размеров файла без значительных
информационных потерь. Технология сжатия данных  используется при работе с
файлами больших размеров, поскольку программы-упаковщики позволяют уменьшить
объем исходного документа в 2 –10 раз. Коэффициент сжатия, или степень
компрессии
, представляет собой отношение между размеров исходных и сжатых
данных. Степень сжатия данных зависит от типа файлов. Например, текстовые файлы
сжимаются в 2-3 раза. Файлы для черно-белых изображений формата
PCX и BMP могут быть сжаты в 5-10 раз. Выполняемые
файлы
EXE сжимаются очень плохо. Упакованные графические 
файлы  не сжимаются.

Технология сжатия данных решает и обратную задачу – восстанавливает
сжатые файлы в исходном виде без значительных информационных потерь.

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

Архивный файл представляет собой набор из
одного или нескольких файлов, помещенных в сжатом виде в единый файл.

Архиваторы помещают копии файлов в сжатом виде в архивный файл на
диске. Архив содержит оглавление, в котором для каждого файла хранится
следующая информация:

         
имя файла;

         
сведения о местонахождении файла на диске;

         
дата и время последней модификации файла;

         
размер файла на диске и в архиве;

         
коэффициент сжатия.

Наиболее распространенные архиваторы имеют приблизительно одинаковые
возможности. Среди распространенных можно назвать
ARJ, WinZIP, WinRaR, WinARJ, LHA, PKPAK, PAK. Утилита WinARJ имеет больше команд, чем архиваторы WinZIP-семейства.
Архиватор
WinRaR имеет наименьшее число функциональных
элементов и возможностей управления по сравнению с
WinZIP
и
WinARJ. Вместе с тем, архиватор WinRaR, выполняя работу медленно, превышает в три-четыри раза степень сжатия
WinZIP-упаковщика, который считается одним из самых быстрых.

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

Большое количество утилит-архиваторов имеют встроенные средства для
создания так называемых самораспаковывающихся архивов. Самораспаковывающийся 
архив
имеет расширение исполняемого файла *
.exe, несколько
больше по размерам, чем файл без самораспаковки. Увеличенный объем
самораспаковывающегося файла объясняется тем, что в нем содержатся
дополнительные программные средства, позволяющие извлекать файлы из архива и
распаковывать их.

 Имена архивных файлов программ ARJ и WinZIP имеют следующие расширения

*.ZIP – для архивных файлов программ WinZIP,

*.ARJ — для архивных файлов программ ARJ .

Работа с архивом WinZIP для Windows

Программа — упаковщик
WinZIP это наиболее распространенная программа сжатия для Window. Утилита
работает в двух режимах: с использованием классического интерфейса WinZIP и
мастера WinZIP. Мастер WinZIP можно запустить из окна программы с помощью
команды
Wizard из меню File.
Окно программы представлено на рис.17.

Рис.17

Архивация одного файла

1.   
Выполните команду меню [Пуск®Программы®Проводник], выделите файл, щелкнув на
значке выбранного файла левой кнопкой мыши.

2.      Откройте контекстное меню, удерживая курсор на выделенном файле.
Выберите команду
Add to Zip. В
появившемся окне
Add (поместить) щелкните на кнопку New. Откроется окно New archive (новый
архив). В поле
File name (имя
файла) введите имя архивного файла, а в поле
Create укажите имя диска и откройте
папку, в которой будет создан архивный файл.

3.     
Щелкните на кнопку Ok
(
рис. 18).

Рис.18

4.     
Щелкните на кнопку Add (рис.19). Закройте
окно
WinZIP командой Exit из меню File или комбинацией клавиш ALT+F4.

5.     
Созданный архивный файл исходного файла
пересылается на диск и папку, выбранные пользователем. Сравните их размеры в
байтах.

Рис.19

6.     
Если хотите создать файл под старым именем
достаточно в контекстном меню (рис. 20) выбрать команду
Add
to <имя исходного файла>
.
zip.
В этом случае архивный и исходный файлы будут находиться в одной папке, под
одним именем, но с разными расширениями. Сравните размеры исходного и архивного
файлов (рис. 21).

Рис.
20

Рис.
21

Архивация группы файлов

1.        
Выполните команду меню [Пуск®Программы®Проводник].

2.        
Выделите любую группу файлов.

3.        
Откройте контекстное меню. Выберите команду Add
to Zip.

4.        
Выполните п.п. 2-6 из раздела 4.2.1. Созданный
архивный файл будет включать группу файлов. Сравните их суммарный размер с размером
архивного файла.

Восстановление файлов из архива

1.        
Выполните команду меню [Пуск®Программы®Проводник].

2.        
Откройте контекстное меню, щелкнув по значку файла.

3.        
Выберите команду Extract
to . В окне Extract укажите место для размещения файла
(рис. 21) и щелкните по кнопке
Extract. В
указанной папке появится восстановленный файл (файлы).

4.        
Если хотите восстановить файл (файлы) на старом
месте достаточно выбрать в контекстном меню команду
Extract to folder <имя файла>.

Рис. 21

Удаление файлов из архива

1.     
Откройте окно программы WinZip. В
появившемся окне выберите команду
Open из меню File. В
открывшемся окне
Open Archive выберите
устройство, папку и архивный файл (рис.22).

Рис.
22

2.     
Щелкните по кнопке Delete на клавиатуре или выберите
команду
Удалить в контекстном меню. Выбранные архивные файлы будут удалены.

Практические
задания

Задание 1. Работа с одним файлом.

1.     
Откройте свою папку с файлами, выделите один файл,
сделайте архивацию файла с тем же именем и с новым именем Архив.

2.     
Восстановите файлы  в другой папке.

3.     
Удалите файлы.

Задание 2. Работа с   группой файлов.

1.     
Откройте свою папку с файлами, выделите три файла,
сделайте архивацию файлов в папку с новым именем Группа.

2.     
Восстановите файлы в другой папке.

3.     
Удалите файлы.

Контрольные
вопросы:

1.     
Какой показатель используется для определения
степени сжатия ?

2.     
Какой архив называется самораспаковывающийся 
архив?

3.     
Какие архиваторы вы знаете?

WinRAR — это 32-разрядная версия архиватора RAR для Windows, мощного средства создания архивов и управления ими. Существует
несколько версий RAR для разных операционных систем, в частности, RAR для Windows,
Linux, FreeBSD, DOS, OS/2, Mac OS X.

RAR для Windows
поставляется в двух вариантах:

  • версия с графическим
    интерфейсом пользователя (GUI)
    — WinRAR.exe;
  • консольная
    версия
    — Rar.exe, запускаемая из командной строки и работающая в
    текстовом режиме.

Некоторые
отличительные особенности WinRAR:

  • полная поддержка архивов
    RAR
    и ZIP
    2.0;
  • использование
    оригинального высокоэффективного алгоритма сжатия данных;
  • наличие графической оболочки
    с поддержкой технологии перетаскивания
    (drag & drop)
    ;
  • возможность
    использования интерфейса
    командной строки
    ;
  • работа с архивами
    других форматов
    (7Z, ACE, ARJ, BZ2, CAB, GZ, ISO, JAR, LZH,
    TAR, UUE, Z
    );
  • поддержка непрерывного
    (solid)
    архивирования, при котором, как правило, достигается
    заметно более высокая степень сжатия (на 10 — 50% и выше), чем
    дают обычные методы, особенно если упаковывается значительное количество
    небольших файлов однотипного содержания;
  • поддержка многотомных
    (разделённых на несколько частей) архивов
    ;
  • создание самораспаковывающихся
    (SFX)
    обычных и многотомных архивов с помощью разных модулей SFX;
  • возможность восстановления
    физически повреждённых архивов;
  • возможность создания и
    использования специальных томов
    для восстановления
    , позволяющих воссоздавать недостающие или
    повреждённые тома многотомных архивов.
  • поддержка кодировки
    Unicode в именах файлов;
  • наличие других
    дополнительных функций, например, шифрования
    данных и имён файлов в архиве, добавления архивных
    комментариев
    , ведения
    протокола ошибок
    и пр.

Краткое
введение: архивация файлов в графической оболочке WinRAR

Прежде всего, запустите
WinRAR
. Дважды щёлкните мышью или нажмите <Enter> на значке
WinRAR. Вы также можете запустить его из меню «Пуск»: зайдите в
группу «Программы», потом в группу «WinRAR» и выберите
пункт «WinRAR».

При запуске WinRAR
показывает в своём окне список файлов и папок в текущей папке. Перейдите в
папку, в которой находятся файлы, предназначенные для архивации
. Для
изменения текущего диска можно нажать комбинацию клавиш <Ctrl+D>,
воспользоваться списком дисков (под панелью инструментов), или щёлкнуть на
маленьком значке диска в нижнем левом углу окна. Для перехода в родительскую
папку нажмите клавиши <Backspace> или <Ctrl+PgUp>,
щёлкните на маленькой кнопке «Вверх» (под панелью
инструментов) или дважды щёлкните на папке «..» в списке
файлов. Для перехода в другую папку нажмите <Enter>, <Ctrl+PgDn>
или дважды щёлкните мышью на этой папке. Для перехода в корневую папку текущего
диска нажмите сочетание клавиш <Ctrl+>.

После того как вы вошли в
папку с нужными файлами, выделите файлы и папки, которые хотите
заархивировать. Это можно сделать клавишами управления курсором или левой
кнопкой мыши при нажатой клавише <Shift> (как в Проводнике и
других программах Windows). Выделять
файлы в окне WinRAR можно также клавишами <Пробел> и <Insert>.
Клавиши <+> и <-> на цифровой клавиатуре позволяют
выделять и снимать выделение с группы файлов с помощью шаблонов (т.е. задавая
маски файлов символами ‘*’ и ‘?’).

Выделив один или несколько
файлов, нажмите кнопку «Добавить« (то же действие
происходит при нажатии <Alt+A> или при выборе команды
«Добавить файлы в архив» из меню «Команды»).
В появившемся диалоговом окне введите имя архива или просто подтвердите имя,
предложенное по умолчанию. Здесь же можно выбрать формат нового архива (RAR
или ZIP ), метод сжатия, размер тома и прочие параметры архивации. Подробно
этот диалог описан в разделе «Диалог
ввода имени архива и его параметров». Нажмите кнопку OK,
чтобы создать архив.

Во время архивации
отображается окно со статистикой. Если вы хотите прервать процесс упаковки,
нажмите кнопку «Отмена«. Окно WinRAR можно минимизировать в
область уведомлений панели задач: для этого нажмите кнопку «Фоновый
режим
«. По окончании архивации окно статистики исчезнет, а созданный
архив станет текущим выделенным файлом.

Добавлять файлы в
существующий архив RAR можно также методом перетаскивания.
Выделите архив в окне WinRAR и нажмите <Enter> (или дважды
щёлкните мышью) на его имени — RAR прочтёт архив и покажет его содержимое.
Теперь вы можете добавлять файлы в архив, просто перетаскивая их из другой
программы в окно WinRAR.

Краткое
введение: извлечение файлов в режиме графической оболочки WinRAR

Чтобы извлечь из архива
файлы, используя графическую оболочку WinRAR, сначала нужно открыть архив в
WinRAR
. Это можно сделать несколькими способами:

· дважды щёлкнуть левой кнопкой мыши или нажать <Enter>
на файле архива в оболочке Windows (в Проводнике или на Рабочем столе). Если
при установке WinRAR был связан (ассоциирован) с файлами-архивами (что делается
по умолчанию), то архив будет открыт в WinRAR. Связать WinRAR с архивами можно
и после его установки в диалоговом окне «Интеграция»;

· дважды щёлкнуть мышью или нажать <Enter>
на файле архива в окне WinRAR;

·
перетащить архив на значок или окно WinRAR. Перед тем как это сделать,
убедитесь, что в окне WinRAR не открыт другой архив, иначе перетаскиваемый
архив будет добавлен в уже открытый;

· запустить WinRAR из командной строки с именем
архива в качестве параметра.

При открытии архива в окне
WinRAR выводится его содержимое. Выделите файлы и папки, которые вы
хотите извлечь. Это можно сделать клавишами управления курсором или левой
кнопкой мыши при нажатой клавише <Shift> (как в Проводнике и
других Windows-программах). Выделять
файлы в WinRAR можно также клавишами <Пробел> и <Insert>.
Клавиши <+> и <-> на цифровой клавиатуре позволяют
выделять и снимать выделение с группы файлов с помощью шаблонов (т.е. задавая
маски файлов символами ‘*’ и ‘?’).

Выделив один или несколько
файлов, нажмите кнопку «Извлечь…« вверху окна WinRAR,
или же нажмите <Alt+E>, введите в появившемся диалоговом
окне нужный путь, после чего нажмите кнопку OK. Здесь же
можно поменять несколько дополнительных параметров (более подробную информацию
см. в разделе «Диалог
указания пути и параметров извлечения»).

Во время извлечения
отображается окно со статистикой. Если вы хотите прервать извлечение, нажмите
кнопку «Отмена«. Окно WinRAR можно минимизировать в область
уведомлений панели задач: для этого нажмите кнопку «Фоновый режим«.
Если извлечение закончится без ошибок, то WinRAR вернётся в оболочку, в
противном случае появится окно диагностических сообщений.

Антивирусные
программы

История появления компьютерных вирусов

Компьютерные вирусы опасны неожиданным появлением и непредсказуемыми 
последствиями. Они уже всесторонне исследованы и изучены, но несмотря на
предпринимаемые усилия, полностью обезопасить программы и компьютеры от 
внедрения вирусов не удается.

Компьютерный вирус – самовоспроизводящаяся программа, наносящая ущерб
аппаратно-программному обеспечению компьютера, которая может внедрять свои
клоны в файл, загрузочный сектор диска, драйверы устройств, сеть, оперативную
память, прикладные программы и т.д. Компьютерный вирус поражает данные,
уменьшает объем свободного дискового пространства, блокирует работу системы,
несанкционированно перезагружает компьютер и т.д.

К настоящему времени специалистами зарегистрировано свыше 25 тысяч
разновидностей вирусных программ, и ежедневно появляются  6 – 8 новых.

Возникновение компьютерных вирусов связано с идеей создания
самовоспроизводящихся программ, , которая исследовалась еще в 1951 году
американским ученым  Д. фон Нейманом. Первые эксперименты в этом направлении
проводились в 1962 году при создании компьютерной игры Darwin. В 1970 году была
создана саморазмножающаяся программа 
Creeper для одной из
первых компьютерных сетей 
ARPANET. Для борьбы с ней была
создана программа
Reaper

Одновременно с появлением в 1977 г. первых персональных компьютеров  Apple
II  и началом их массовой продажи появились и компьютерные
вирусы. В конце 70-х годов стали бурно развиваться  сети на базе коммутируемых 
телефонных линий. С появлением
BBS получил распространение
новый вид компьютерного хулиганства – загрузка в сеть программ, уничтожающих
данные на компьютерах пользователей. В начале 80-х годов  появился  первый
загрузочный вирус
Elk Cloner  для Apple II.

В истории компьютерных вирусов переломным стал 1984 год, когда
итальянские программисты  Р. Черути и М. Морокути подготовили теоретическую
базу для практической реализации распространения на дискетах загрузочных
вирусов. Они подробно изложили свои концепции широкой общественности и
опубликовали спецификацию загрузочной (бутовой) вирусной программы. Несмотря на
то, что Черути и Морокути отказались от дальнейших практических исследований в
этом направлении, их идеи были подхвачены и широко реализованы на практике.

Еще одним исследователем в области реализации саморазмножающихся
программ в 1984 году стал сотрудник Лехайского университета Ф. Коэн, который
провел ряд экспериментов на системе
VAX 11/750, работавшей
под управлением операционной системы
UNIX.  Опубликованные
им статьи стали  руководством для разработки вирусных программ. Принято
считать, что термин «компьютерный вирус» был впервые введен Ф. Коэном.

Первые попытки противодействия вирусным программам были предприняты в
1985 году Т. Нельфом, который стал собирать список опасных загружаемых программ
для
MS DOS,   получивший название «чертова дюжина». В
настоящее время этот список поддерживается Э. Ньюхаузом и его можно получить из
сети Интернет, там же можно получить бюллетень
WildList  (www. virusbtn.com), автором
которого является  Д. Уэльс.

В 1984 году американский программист Э. Хопкинс написал первые
антивирусные программы.

Массовое распространение компьютеров нового семейства  IBM PC со второй половины 80-х годов стало вторым этапом  в развитии вирусов,
и именно в это время появились так называемые хакеры. 

Хакеры – это специалисты, которые занимаются исследованием прикладных
областей компьютерных технологий и разработкой небольших недокументированных
программ. Эти программы, как правило, представляют собой модификации
программного кода уже созданных программных продуктов.  Таким образом,
«кромсание» (
hacker)  чужих  программ и соответствует
понятию хакер. Неформальный кодекс хакера запрещает создавать вирусные
программы, тем не менее существует  прослойка хакеров (технокрысы), которые
обращают свои знания во вред международному компьютерному сообществу.

Кракеры – это специалисты, занимающиеся вопросами в операционную
систему, снятия защиты с программного продукта, изменения атрибутов защищенной
программы. Компьютерный взлом программ позволяет распространять в огромных
количествах программные продукты без санкции разработчиков коммерческого
программного обеспечения. Кракеры проникают и в базы данных пользователей с
конфиденциальной информацией, имеющие средства защиты от незаконного доступа и
копирования.  Среди кракеров существуют «информационные путешественники»,
которые проникают по сети на  удаленные компьютеры, извлекают из них коды и
пароли  и пользуются ими наравне с законными хозяевами.

На территорию бывшего СССР компьютерные вирусы стали проникать с
момента освоения рынка персональных компьютеров, т.е. с 1988 года. Первый
компьютерный вирус (венский) был занесен в начале 1988 года на компьютеры
Переславль-Залесского института программных систем, в середине  года этот вирус
появился в Киеве. В этом же году предпринята  попытка создания отечественной
антивирусной программы  А.А. Чижовым.

Классификация компьютерных вирусов

Приняты следующие признаки классификации
компьютерных вирусов:

1.     
место расположения программного ядра вирусной
программы;

2.     
способ заражения вычислительной системы;

3.     
деструктивные результаты;

4.     
способ проявления вирусов.

В соответствии с классификацией различаются
следующие типы вирусов:

5.     
файловые;

6.     
загрузочные;

7.     
файлово-загрузочные;

8.     
пакетные;

9.     
сетевые;

10. 
макровирусы;

11. 
вирусы-невидимки;

12. 
полиморфные;

13. 
троянские программы;

14. 
вирусы замедленного действия.

Рассмотрим кратко действие перечисленных типов вирусов.

Файловые вирусы   — это наиболее
распространенная группа вирусов, инфицирующих исполняемые файлы. Они
переносятся с компьютера на компьютер в файлах и обладают высокой инфицирующей
способностью, так как при каждом запуске инфицированной программы происходит
самокопирование вируса. Файловые вирусы могут перехватывать многие функции
прерывания, в результате чего заражение файлов происходит при переименовании,
удалении, копировании, исполнении, открытии файлов и т.д.

Загрузочные вирусы  переносятся из систему в
систему через загрузочный сектор и заражают только
BOOT-сектора
дискет и жестких дисков, поэтому они называются бутовыми. Эти вирусные
программы имеют малые размеры (до 512 байт) и размещаются в одном секторе
диска.

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

Пакетные вирусы  представляют собой наиболее
простой тип вирусов. Ядро программы содержится в командном пакетном файле с
расширением  
bat.

Сетевые вирусы  распространяются из локальной
или глобальной сети. Они проникают через сетевые средства защиты и имеют очень
высокую скорость распространения в сети. Наиболее распространенным типом
сетевых вирусов являются компьютерные «черви», которые не приводят к серьезным
нарушениям системы. Они не загружаются в файлы и приносят незначительный вред,
который заключается в понижении пропускной способности сети, замедлении работы
на участках с наиболее напряженным потокообменом данными. Засорение сети
подобным вирусом может остановить работу на некоторых сетевых участках.

Макровирусы   инфицируют документы MS Word и Excel. Это наиболее распространенный тип
вируса, который поражает компьютер в 80% всех случаев инфицирования.
Макровирусы не наносят вреда данным на системном уровне, но приводят к
существенным потерям инфицированных документов. Вирус  автоматически
переписывается и заражает  главный шаблон
Normal.dot, а также все файлы, сохраненные как шаблоны с расширением dot. Он
также может изменить настройку специальных возможностей и входа в сеть, стирает
все справочные файлы
Windows и некоторые системные файлы.

Вирусы-невидимки  считаются наиболее опасными
для программ. Заразив компьютер, этот вирус остается незамеченным системами
контроля. Для борьбы с этим вирусом применяются комплексные методы.

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

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

Вирусы замедленного действия  могут
маскировать свое присутствие с помощью временной задержки, т.е. они имеют 
своего рода инкубационный период. Она обнаруживает себя после запуска системы и
не имеет длительного периода распространения. Одним из таких вирусов является
файловый вирус
CIH, который  активизируется 26-го числа
каждого месяца и разрушает первые 100 Мбайт винчестера. Этот  вирус
специализируется на операционных системах
Windows 95/98 и
совершенно безопасен для
Windows NT  и  Macintoch.

Защита от компьютерных вирусов

Основная тактика защиты от инфицирования программ компьютерными
вирусами состоит в использовании программного обеспечения из надежных
источников, в постоянном контроле состояния наиболее важной информации в
компьютерной системе. Во избежание тяжелых последствий, вызванных деятельностью
вирусных программ, пользователь должен соблюдать ряд несложных правил:

1.     
следует завершать рабочий день  проверкой
компьютера антивирусной программой;

2.     
наиболее ценная информация должна сохраняться в
архивах на сменных носителях;

3.     
следует подвергать антивирусной проверке файлы до
загрузки с внешних носителей или из Интернет;

4.     
при обнаружении признаков вирусного заражения
следует прекратить работу, перезагрузиться с системной дискеты и проверить все
диски антивирусными программами.

К числу вирусоподобных действий относятся:

         
попытка несанкционированного низкоуровневого
форматирования жесткого диска. На дисководе уничтожается вся информация,
восстановить которую потом невозможно;

         
попытка записи в загрузочный сектор жесткого диска
или гибких дисков;

         
попытка перезаписи программных файлов;

         
изменение атрибута «только чтение».

Программные продукты-антивирусы развивались по
двум направлениям:

1.     
создание программ-детекторов, способных
обнаруживать вирусы;

2.     
создание программ-фагов, способных удалять коды
вирусов из программ.

Наиболее известными полифагами являются Aidstest (Д.Н. Лозинский),  Doctor (А.А. Чижов), AntiKot (О.Г. Котик), Dr.Web  (И. Данилов).

В настоящее время существуют антивирусные
программы следующих   видов:

1. Программы-фаги, которые «выкусывают»
компьютерные вирусы из зараженных программ.

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

3. Программы – ревизоры, которые  определяют
внесены ли изменения в текст программы, выдают сообщения о подозрительных
вирусах, которые находят, сравнивая состояние загрузки исходной с последующей,
могут лечить вирусы.

4. Программы-вакцины, которые  делают
компьютер или отдельные программы невосприимчивыми к тому или иному типу
компьютерного вируса.

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

Для борьбы с вирусными программами существует
множество пакетов антивирусных утилит с разными сервисными возможностями и
мощностью. Утилиты для
Windows 95/98 сертифицируются
Международной ассоциацией по компьютерной безопасности (
ICSA).

Пользователям следует приобретать полные 
версии сертифицированных продуктов. Сертифицированные антивирусные утилиты
должны обнаруживать все компьютерные вирусы, занесенные в список 
WildList. Зарегистрированные антивирусные программы обновляются с узлов
Интернет.

Антивирусные программы обеспечивают два типа
защиты:

1.     
защита по требованию пользователя,
предусматривающая проверку файлов на наличие вирусов;

2.     
защита в реальном времени, обеспечивающая проверку
на наличие вирусного заражения при работе программы в фоновом режиме.

Антивирусный  пакет DoctorWeb

Антивирусные пакеты, разработанные российскими компаниями
«Диалог-Наука» и «Лаборатория Касперского», по результатам   тестирования
находятся в первых рядах программных средств борьбы с компьютерными вирусами.
Антивирусная программа
Dr.Web, панель
которой представлена на рисунке 2 в разделе 5, борется более чем с 15 тысячами
вирусов, в том числе и полиморфными. В нее заложены мощные средства борьбы с
макровирусами. Программа содержит эвристический анализатор, позволяющий
обнаружить вирусоподобные коды, которые могут принадлежать неизвестным, а также
полиморфным и прочим сложным вирусам. Успех такого анализа оценивается в 82%.
Программа обнаруживает вирусы в самораспаковывающихся и архивных документах,
полученных с помощью многих архиваторов:
ZIP, LZH, ARJ, RAR, ZOO, ICE.

Начальные установки программы выполняются с помощью команды Настройки®Изменить
установки
или щелчком по кнопке  Установки (рис.2).
В программе имеется справочная система, которая вызывается командой
Помощь®Разделы
помощи.

5.4.1. Проверка дискеты на вирус программой Dr.Web32

1.     
Включите компьютер.

2.     
Щелкните дважды левой кнопкой мыши по ярлыку
программы
DrWeb32 на рабочем столе.

3.     
В появившемся окне Dr.Web
for Windows 95-2000
(рис. 23) на левой панели инструментов для проверки  выберите  диск, папку или
файлы.

4.     
Щелкните по кнопке Начать на правой
панели окна программы.

5.     
В случае обнаружения вирусов программа
«лечит»  дискету.

6.     
Закройте окно Dr.Web for
Windows 95-2000 командой
Выход из меню Файл или комбинацией клавиш ALT+X.

Рис.
23

5.4.2. Проверка дискеты на вирус программой Dr.Web32, используя Проводник

1.     
Включите компьютер.

2.     
Выполните команду меню [Пуск®Программы®Проводник].

3.     
Откройте папку DrWeb32.

4.     
Запустите программу DrWeb32,
щелкнув по значку файла
drweb32.exe.
Откроется окно
Dr.Web for Windows
95-2000.

5.     
Выполните п.п.4-6 из раздела 5.4.1.

Практические
задания

Задание 1.Проверка дискеты на вирус.

1.       
Запустить антивирусную программу DrWeb32, с помощью
проводника.

2.       
Протестировать свою дискету.

3.       
Закрыть программу DrWeb32.

Контрольные вопросы:

1. Что такое компьютерный вирус?

2. Где можно получить информацию о современных
компьютерных вирусах и антивирусных программах?

3. Какие группы вирусов существуют и какие из
них наиболее опасны?

4. Что такое вирусоподобные действия? Что
следует предпринять пользователю, если такие действия имели место?

5. Кто такие хакеры и кракеры

Архивация — процесс помещения файлов и папок в специальный «сжатый» файл, который, как правило, значительно меньше занимает места на вашем жестком диске.

Благодаря этому, на любой носитель можно записать гораздо больше информации, эту информацию быстрее передать по сети интернет, а значит архивация всегда будет пользоваться спросом!

В этой статье рассмотрим как можно заархивировать файл или папку на компьютере; так же затронем самые популярные программы для архивации.

Архивация средствами Windows

Если у вас современная версия ОС Windows (Vista, 7, 8) — то в ее проводник встроена возможность работать напрямую со сжатыми zip-папками. Это очень удобно и позволяет быстро и без проблем сжать многие типы файлов. Давайте рассмотрим по шагам как это сделать.

Допустим, у нас есть файл-документ (Word). Его реальный размер 553 Кб.

1) Чтобы заархивировать такой файл, кликните по нему правой кнопкой мышки, далее выберите в контекстном меню проводника вкладку «отправить/сжатая zip-папка». См. скриншот ниже.

2) Все! Архив должен быть готов. Если зайти в его свойства можно заметить, что размер такого файла уменьшился примерно на 100 Кб. Немного, но если сжимать мегабайты, или гигабайты информации — экономия может стать очень существенна!

Кстати, сжатия этого файла составило 22%. Проводник, встроенный в Windows, легко позволяет работать с такими сжатыми zip-папками. Многие пользователи даже не догадываются, что имеют дело с заархивированными файлами!

Архивация программами

Для архивации одних лишь zip-папок недостаточно. Во-первых, уже дано есть более совершенные форматы, которые позволяют сжимать файл еще сильнее (в этом плане интересная статья про сравнение архиваторов: https://pcpro100.info/kakoy-arhivator-silnee-szhimaet-faylyi-winrar-winuha-winzip-ili-7z/). Во-вторых, не все ОС поддерживают напрямую работу с архивами. В-третьих, скорость работы ОС с архивами не всегда может устраивать. В-четвертых, никому не помешают дополнительные функции при работе с архивами.

Одни из самых популярных программ для архивации файлов и папок — это WinRar, 7Z и файловый командир — Total Commander.

WinRar

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

Далее должно появиться окно с основными настройками: здесь можно указать степень компрессии файла, дать ему имя, поставить пароль на архив и многое другое.

Созданный архив «Rar» сжал файл еще более сильно, нежели «Zip». Правда, времени на работу с таким типом — программа затрачивает больше…

Очень популярный архиватор с высокой степенью сжатия файлов. Его новый формат «7Z» позволяет сжать некоторый типы файлов сильнее чем WinRar! Работать с программой очень просто.

После установки, в проводнике будет контекстное меню с 7z, вам остается только выбрать опцию добавления файла к архиву.

Далее задать настройки: степень сжатия, имя, пароли и пр. Нажать на «OK» и файл-архив готов.

Кстати, как и говорилось, 7z не намного, но сжал сильнее всех предыдущих форматов.

Total Commander

Один из самых популярных командиров для работы в ОС Windows. Считается главным конкурентом проводника, который по умолчанию встроен в Windows.

1. Выделяете файлы и папки, которые хотите заархивировать (они выделяются красным цветом). Затем на панеле управления жмете функцию «запаковать файлы».

2. Перед вами должно открыться окно с настройками сжатия. Здесь присутствуют самые популярные метода сжатия и форматы: zip, rar, 7z, ace, tar и пр. Вам нужно выбрать формат, задать имя, пути и пр. Далее нажимаете на кнопку «OK» и архив готов.

3. Чем удобна программа — так это своей направленностью к пользователю. новички могут даже не замечать что они работают с архивами: в них можно легко входить, выходить, добавлять другие файлы всего лишь перетаскивая из одной панельки программы в другую! Да и ненужно иметь десятки установленных архиваторов на своем компьютере, чтобы архивировать файлы в различные форматы.

Заключение

Заархивировав файлы и папки можно существенно снизить размер файлов, а соответственно поместить на ваш диск больший объем информации.

Но помните, что не все типы файлов следует сжимать. Например, практически бесполезно сжимать видео, аудио, картинки*. Для них есть другие методы и форматы.

* Кстати, формат картинок «bmp» — неплохо можно сжать. Другие форматы, например, такой популярный как «jpg» — не даст никакого выигрыша…

Мне нужно файл Ворд отправить заказчику в архиве, но я не умею этого делать. Подскажите, пожалуйста, как это сделать желательно подробнее. Автор лучшего ответа будет вознаграждён кредитами в озвученной им сумме. Спасибо.

  • Для начала убедитесь, что у вас есть установленный архиватор (WinRar, WinZip, 7z).
  • Если такового нет, то скачайте такой в интернете. Установите его, следуя подсказкам, которые вам будет предлагать программа-установщик. Вкраце можно сказать по установке — нажимайте постоянно кнопку «Далее», «Ок», «Установить», в общем любую подобную, которая означает ваше согласие.
  • Когда архиватор уже есть. Нажмите правок кнопкой мыши по файлу, который вам необходимо заархивировать. Найдите в раскрывшемся контекстном меню пункт «Добавить к архиву..», «Создать архив..» или что-то похожее. Быть может есть строчка с названием архиватора (WinRar, WinZip, 7z) и при наведении на неё появится дополнительный список действий, среди которых будет что-то подобное: «Добавить к архиву..», «Создать архив..»
  • Появится окошко создания архива с данным файлом. Можно просто нажать «Ок», «Готово», (или другую, которая означает ваше согласие с созданием архива — просто в разных программах название кнопки может отличаться).
  • Архив будет создан и вы увидите его рядом с вашим файлом, который в внесли в архив. Данный архив можно использовать по назначению (в нём находится копия того файла, который вы добавляли в архив, сам файл остался целый и невредимый лежать возле архива).

Для начала проверьте есть ли у вас какой нибудь архиватор например 7zip или winrar затем правой кнопкой мыши нажимаете по документу и выбираете добавить в архив. Настраиваете параметры и нажимаете ок. Архив появится в той папке которую вы указали в параметрах.

Мне нужно файл Ворд отправить заказчику в архиве, но я не умею этого делать.

Подскажите, пожалуйста, как это сделать желательно подробнее.

Автор лучшего ответа будет вознаграждён кредитами в озвученной им сумме.

  • Для начала убедитесь, что у вас есть установленный архиватор (WinRar, WinZip, 7z).
  • Если такового нет, то скачайте такой в интернете. Установите его, следуя подсказкам, которые вам будет предлагать программа-установщик. Вкраце можно сказать по установке — нажимайте постоянно кнопку «Далее», «Ок», «Установить», в общем любую подобную, которая означает ваше согласие.
  • Когда архиватор уже есть. Нажмите правок кнопкой мыши по файлу, который вам необходимо заархивировать. Найдите в раскрывшемся контекстном меню пункт «Добавить к архиву..», «Создать архив..» или что-то похожее. Быть может есть строчка с названием архиватора (WinRar, WinZip, 7z) и при наведении на неё появится дополнительный список действий, среди которых будет что-то подобное: «Добавить к архиву..», «Создать архив..»
  • Появится окошко создания архива с данным файлом. Можно просто нажать «Ок», «Готово», (или другую, которая означает ваше согласие с созданием архива — просто в разных программах название кнопки может отличаться).
  • Архив будет создан и вы увидите его рядом с вашим файлом, который в внесли в архив. Данный архив можно использовать по назначению (в нём находится копия того файла, который вы добавляли в архив, сам файл остался целый и невредимый лежать возле архива).

По Вашему ответу выполнила действия у меня получилось 2 стопочки книг, т.к. заархивировала 2 файла: файл отправленый первоначально и он же скопированный с текстовой биржи.

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

Теперь эти 2 стопочки книг я смогу отправить с сайта текстовой биржи обычной загрузкой или архив загружается как-то по особенному? — 5 лет назад

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

1.»добавить в архив. » — эта функция позволяет добавить файл «музыка» в один из уже существующих архивов. Для того, чтобы это сделать, нажимаете «обзор», и там находите нужный вам архив, выделяете его, нажимаете «сохранить», а потом «ок».

2.Следующий вариант архивирования, который высветиться вам в меню — добавить в архив «музыка». При выборе этого варианта, компьютер создаст архив, именуемый «музыка»

  1. Третий вариант подойдет вам, если у вас на компьютере установлена електронная почта. Собственно, третий вариант ничем не отличен от первого, но после архивирования компьютер автоматически откроет программу-почту, и добавит в письмо архив «музыка»
  2. Ну и последний вариант — «добавить в архив «музыка», и отправить по e-mail» — собственно, почти ничем не отличен от второго варианта, только после архивирования компьютер запустит почту (если таковая установлена на компьютере», и создаст письмо с этим архивом

DOCX- это файл архив, весом не более 10 килобайт, которое можно распаковать сторонней программой. Данный формат является модернизированной версией всем известного формата DOC. Весомым отличием стал малый вес при сохранении всех исходных параметров изображения.

В 2008 году корпорация Microsoft создала расширение для текстового редактора Word, и сделала формат DOCX расширением для редактора версии 2007 года.

Как открыть файл DOCX

Открыть файл можно при помощи любого текстового редактора формата Office, с которым вы привыкли работать. Главное, чтобы текстовик поддерживал нужный вам формат и был не старше 2007 года.

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

Стандартная программа для открытия программа для открытия DOCX файлов — WindowsWord. Так как и текстовик и файл являются продуктами Майкрософта, то их совместимость не поддаётся сомнению.

Инструкция

Для начала открываем на своём компьютере программу для работы с текстовыми файлами Microsoft Word.

В появившемся окне программы кликаем раздел Файл».

В открывшимся окне с лева щёлкаем вкладку Открыть»

При желании процесс можно упростить, нажав комбинацию клавиш Ctrl+O.

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

Текстовый документ откроется в Word и вы легко сможете его прочитать или отредактировать.

Если на вашем устройстве установлен Microsoft Office, то расширение DOCX-файлов будет автоматически находиться в текстовом редакторе Word. Достаточно открыть нужный файл двумя щелчками левой клавиши мышки.

Для пользователей Word более ранней версии, чем версия 2007 года есть возможность работы с файлами DOCX. Для этого нужно установить специальный пакет расширений, скачав его с официального сайта Майкрософт.

Программы, открывающие DOCX

Формат docx — это универсальный формат для отправки электронных сообщений и является самым удобным форматом для текстовых документов.

Отсылка в облачное хранилище, электронной почтой или работа с текстом на мобильном устройстве с файлами Docx намного проще, чем с иными форматами текстовых файлов. Благодаря малому весу файл docx открывается на любом устройстве значительно быстрее своих собратьев.

Для работы с данным файлом можно воспользоваться следующими программами:

  • WindowsWord
  • Libre Office
  • Open Office
  • Word Pad
  • AiReader
  • Ice Book Reader
  • Calibre
  • Universal Viewer
  • Text Maker
  • Ability Write

Это лишь небольшой список из огромного количества программ, открывающих текстовые файлы формата DOCX.

Время на прочтение
16 мин

Количество просмотров 54K

Задача обработки документов в формате docx, а также таблиц xlsx и презентаций pptx является весьма нетривиальной. В этой статье расскажу как научиться парсить, создавать и обрабатывать такие документы используя только XSLT и ZIP архиватор.

Зачем?

docx — самый популярный формат документов, поэтому задача отдавать информацию пользователю в этом формате всегда может возникнуть. Один из вариантов решения этой проблемы — использование готовой библиотеки, может не подходить по ряду причин:

  • библиотеки может просто не существовать
  • в проекте не нужен ещё один чёрный ящик
  • ограничения библиотеки по платформам и т.п.
  • проблемы с лицензированием
  • скорость работы

Поэтому в этой статье будем использовать только самые базовые инструменты для работы с docx документом.

Структура docx

Для начала разоберёмся с тем, что собой представляет docx документ. docx это zip архив который физически содержит 2 типа файлов:

  • xml файлы с расширениями xml и rels
  • медиа файлы (изображения и т.п.)

А логически — 3 вида элементов:

  • Типы (Content Types) — список типов медиа файлов (например png) встречающихся в документе и типов частей документов (например документ, верхний колонтитул).
  • Части (Parts) — отдельные части документа, для нашего документа это document.xml, сюда входят как xml документы так и медиа файлы.
  • Связи (Relationships) идентифицируют части документа для ссылок (например связь между разделом документа и колонтитулом), а также тут определены внешние части (например гиперссылки).

Они подробно описаны в стандарте ECMA-376: Office Open XML File Formats, основная часть которого — PDF документ на 5000 страниц, и ещё 2000 страниц бонусного контента.

Минимальный docx

Простейший docx после распаковки выглядит следующим образом

image

Давайте посмотрим из чего он состоит.

[Content_Types].xml

Находится в корне документа и перечисляет MIME типы содержимого документа:

<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
    <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
    <Default Extension="xml" ContentType="application/xml"/>
    <Override PartName="/word/document.xml"
              ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>
</Types>

_rels/.rels

Главный список связей документа. В данном случае определена всего одна связь — сопоставление с идентификатором rId1 и файлом word/document.xml — основным телом документа.

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
    <Relationship 
        Id="rId1" 
        Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
        Target="word/document.xml"/>
</Relationships>

word/document.xml

Основное содержимое документа.

word/document.xml

<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:o="urn:schemas-microsoft-com:office:office"
            xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
            xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"
            xmlns:v="urn:schemas-microsoft-com:vml"
            xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing"
            xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing"
            xmlns:w10="urn:schemas-microsoft-com:office:word"
            xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
            xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml"
            xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup"
            xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk"
            xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml"
            xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"
            mc:Ignorable="w14 wp14">
    <w:body>
        <w:p w:rsidR="005F670F" w:rsidRDefault="005F79F5">
            <w:r>
                <w:t>Test</w:t>
            </w:r>
            <w:bookmarkStart w:id="0" w:name="_GoBack"/>
            <w:bookmarkEnd w:id="0"/>
        </w:p>
        <w:sectPr w:rsidR="005F670F">
            <w:pgSz w:w="12240" w:h="15840"/>
            <w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" 
                     w:header="720" w:footer="720" w:gutter="0"/>
            <w:cols w:space="720"/>
            <w:docGrid w:linePitch="360"/>
        </w:sectPr>
    </w:body>
</w:document>

Здесь:

  • <w:document> — сам документ
  • <w:body> — тело документа
  • <w:p> — параграф
  • <w:r> — run (фрагмент) текста
  • <w:t> — сам текст
  • <w:sectPr> — описание страницы

Если открыть этот документ в текстовом редакторе, то увидим документ из одного слова Test.

word/_rels/document.xml.rels

Здесь содержится список связей части word/document.xml. Название файла связей создаётся из названия части документа к которой он относится и добавления к нему расширения rels. Папка с файлом связей называется _rels и находится на том же уровне, что и часть к которой он относится. Так как связей в word/document.xml никаких нет то и в файле пусто:

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
</Relationships>

Даже если связей нет, этот файл должен существовать.

docx и Microsoft Word

docx созданный с помощью Microsoft Word, да в принципе и с помощью любого другого редактора имеет несколько дополнительных файлов.

image

Вот что в них содержится:

  • docProps/core.xml — основные метаданные документа согласно Open Packaging Conventions и Dublin Core [1], [2].
  • docProps/app.xml — общая информация о документе: количество страниц, слов, символов, название приложения в котором был создан документ и т.п.
  • word/settings.xml — настройки относящиеся к текущему документу.
  • word/styles.xml — стили применимые к документу. Отделяют данные от представления.
  • word/webSettings.xml — настройки отображения HTML частей документа и настройки того, как конвертировать документ в HTML.
  • word/fontTable.xml — список шрифтов используемых в документе.
  • word/theme1.xml — тема (состоит из цветовой схемы, шрифтов и форматирования).

В сложных документах частей может быть гораздо больше.

Реверс-инжиниринг docx

Итак, первоначальная задача — узнать как какой-либо фрагмент документа хранится в xml, чтобы потом создавать (или парсить) подобные документы самостоятельно. Для этого нам понадобятся:

  • Архиватор zip
  • Библиотека для форматирования XML (Word выдаёт XML без отступов, одной строкой)
  • Средство для просмотра diff между файлами, я буду использовать git и TortoiseGit

Инструменты

  • Под Windows: zip, unzip, libxml2, git, TortoiseGit
  • Под Linux: apt-get install zip unzip libxml2 libxml2-utils git

Также понадобятся скрипты для автоматического (раз)архивирования и форматирования XML.
Использование под Windows:

  • unpack file dir — распаковывает документ file в папку dir и форматирует xml
  • pack dir file — запаковывает папку dir в документ file

Использование под Linux аналогично, только ./unpack.sh вместо unpack, а pack становится ./pack.sh.

Использование

Поиск изменений происходит следующим образом:

  1. Создаём пустой docx файл в редакторе.
  2. Распаковываем его с помощью unpack в новую папку.
  3. Коммитим новую папку.
  4. Добавляем в файл из п. 1. изучаемый элемент (гиперссылку, таблицу и т.д.).
  5. Распаковываем изменённый файл в уже существующую папку.
  6. Изучаем diff, убирая ненужные изменения (перестановки связей, порядок пространств имён и т.п.).
  7. Запаковываем папку и проверяем что получившийся файл открывается.
  8. Коммитим изменённую папку.

Пример 1. Выделение текста жирным

Посмотрим на практике, как найти тег который определяет форматирование текста жирным шрифтом.

  1. Создаём документ bold.docx с обычным (не жирным) текстом Test.
  2. Распаковываем его: unpack bold.docx bold.
  3. Коммитим результат.
  4. Выделяем текст Test жирным.
  5. Распаковываем unpack bold.docx bold.
  6. Изначально diff выглядел следующим образом:

diff
Рассмотрим его подробно:

docProps/app.xml

@@ -1,9 +1,9 @@
-  <TotalTime>0</TotalTime>
+  <TotalTime>1</TotalTime>

Изменение времени нам не нужно.

docProps/core.xml

@@ -4,9 +4,9 @@
-  <cp:revision>1</cp:revision>
+  <cp:revision>2</cp:revision>
   <dcterms:created xsi:type="dcterms:W3CDTF">2017-02-07T19:37:00Z</dcterms:created>
-  <dcterms:modified xsi:type="dcterms:W3CDTF">2017-02-07T19:37:00Z</dcterms:modified>
+  <dcterms:modified xsi:type="dcterms:W3CDTF">2017-02-08T10:01:00Z</dcterms:modified>

Изменение версии документа и даты модификации нас также не интересует.

word/document.xml

diff

@@ -1,24 +1,26 @@
    <w:body>
-    <w:p w:rsidR="0076695C" w:rsidRPr="00290C70" w:rsidRDefault="00290C70">
+    <w:p w:rsidR="0076695C" w:rsidRPr="00F752CF" w:rsidRDefault="00290C70">
       <w:pPr>
         <w:rPr>
+          <w:b/>
           <w:lang w:val="en-US"/>
         </w:rPr>
       </w:pPr>
-      <w:r>
+      <w:r w:rsidRPr="00F752CF">
         <w:rPr>
+          <w:b/>
           <w:lang w:val="en-US"/>
         </w:rPr>
         <w:t>Test</w:t>
       </w:r>
       <w:bookmarkStart w:id="0" w:name="_GoBack"/>
       <w:bookmarkEnd w:id="0"/>
     </w:p>
-    <w:sectPr w:rsidR="0076695C" w:rsidRPr="00290C70">
+    <w:sectPr w:rsidR="0076695C" w:rsidRPr="00F752CF">

Изменения в w:rsidR не интересны — это внутренняя информация для Microsoft Word. Ключевое изменение тут

         <w:rPr>
+          <w:b/>

в параграфе с Test. Видимо элемент <w:b/> и делает текст жирным. Оставляем это изменение и отменяем остальные.

word/settings.xml

@@ -1,8 +1,9 @@
+  <w:proofState w:spelling="clean"/>
@@ -17,10 +18,11 @@
+    <w:rsid w:val="00F752CF"/>

Также не содержит ничего относящегося к жирному тексту. Отменяем.

7 Запаковываем папку с 1м изменением (добавлением <w:b/>) и проверяем что документ открывается и показывает то, что ожидалось.
8 Коммитим изменение.

Пример 2. Нижний колонтитул

Теперь разберём пример посложнее — добавление нижнего колонтитула.
Вот первоначальный коммит. Добавляем нижний колонтитул с текстом 123 и распаковываем документ. Такой diff получается первоначально:

diff

Сразу же исключаем изменения в docProps/app.xml и docProps/core.xml — там тоже самое, что и в первом примере.

[Content_Types].xml

@@ -4,10 +4,13 @@
   <Default Extension="xml" ContentType="application/xml"/>
   <Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>
+  <Override PartName="/word/footnotes.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml"/>
+  <Override PartName="/word/endnotes.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml"/>
+  <Override PartName="/word/footer1.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"/>

footer явно выглядит как то, что нам нужно, но что делать с footnotes и endnotes? Являются ли они обязательными при добавлении нижнего колонтитула или их создали заодно? Ответить на этот вопрос не всегда просто, вот основные пути:

  • Посмотреть, связаны ли изменения друг с другом
  • Экспериментировать
  • Ну а если совсем не понятно что происходит:

Читать документацию
Идём пока что дальше.

word/_rels/document.xml.rels

Изначально diff выглядит вот так:

diff

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+  <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
   <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/>
+  <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/>
   <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/>
   <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
-  <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
-  <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/>
+  <Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer1.xml"/>
+  <Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes" Target="endnotes.xml"/>
+  <Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes" Target="footnotes.xml"/>
 </Relationships>

Видно, что часть изменений связана с тем, что Word изменил порядок связей, уберём их:

@@ -3,6 +3,9 @@
+  <Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" Target="footer1.xml"/>
+  <Relationship Id="rId7" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes" Target="endnotes.xml"/>
+  <Relationship Id="rId8" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes" Target="footnotes.xml"/>

Опять появляются footer, footnotes, endnotes. Все они связаны с основным документом, перейдём к нему:

word/document.xml

@@ -15,10 +15,11 @@
       </w:r>
       <w:bookmarkStart w:id="0" w:name="_GoBack"/>
       <w:bookmarkEnd w:id="0"/>
     </w:p>
     <w:sectPr w:rsidR="0076695C" w:rsidRPr="00290C70">
+      <w:footerReference w:type="default" r:id="rId6"/>
       <w:pgSz w:w="11906" w:h="16838"/>
       <w:pgMar w:top="1134" w:right="850" w:bottom="1134" w:left="1701" w:header="708" w:footer="708" w:gutter="0"/>
       <w:cols w:space="708"/>
       <w:docGrid w:linePitch="360"/>
     </w:sectPr>

Редкий случай когда есть только нужные изменения. Видна явная ссылка на footer из sectPr. А так как ссылок в документе на footnotes и endnotes нет, то можно предположить что они нам не понадобятся.

word/settings.xml

diff

@@ -1,19 +1,30 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <w:settings xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" mc:Ignorable="w14 w15">
   <w:zoom w:percent="100"/>
+  <w:proofState w:spelling="clean"/>
   <w:defaultTabStop w:val="708"/>
   <w:characterSpacingControl w:val="doNotCompress"/>
+  <w:footnotePr>
+    <w:footnote w:id="-1"/>
+    <w:footnote w:id="0"/>
+  </w:footnotePr>
+  <w:endnotePr>
+    <w:endnote w:id="-1"/>
+    <w:endnote w:id="0"/>
+  </w:endnotePr>
   <w:compat>
     <w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="15"/>
     <w:compatSetting w:name="overrideTableStyleFontSizeAndJustification" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
     <w:compatSetting w:name="enableOpenTypeFeatures" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
     <w:compatSetting w:name="doNotFlipMirrorIndents" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
     <w:compatSetting w:name="differentiateMultirowTableHeaders" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/>
   </w:compat>
   <w:rsids>
     <w:rsidRoot w:val="00290C70"/>
+    <w:rsid w:val="000A7B7B"/>
+    <w:rsid w:val="001B0DE6"/>

А вот и появились ссылки на footnotes, endnotes добавляющие их в документ.

word/styles.xml

diff

@@ -480,6 +480,50 @@
       <w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman"/>
       <w:b/>
       <w:sz w:val="28"/>
     </w:rPr>
   </w:style>
+  <w:style w:type="paragraph" w:styleId="a4">
+    <w:name w:val="header"/>
+    <w:basedOn w:val="a"/>
+    <w:link w:val="a5"/>
+    <w:uiPriority w:val="99"/>
+    <w:unhideWhenUsed/>
+    <w:rsid w:val="000A7B7B"/>
+    <w:pPr>
+      <w:tabs>
+        <w:tab w:val="center" w:pos="4677"/>
+        <w:tab w:val="right" w:pos="9355"/>
+      </w:tabs>
+      <w:spacing w:after="0" w:line="240" w:lineRule="auto"/>
+    </w:pPr>
+  </w:style>
+  <w:style w:type="character" w:customStyle="1" w:styleId="a5">
+    <w:name w:val="Верхний колонтитул Знак"/>
+    <w:basedOn w:val="a0"/>
+    <w:link w:val="a4"/>
+    <w:uiPriority w:val="99"/>
+    <w:rsid w:val="000A7B7B"/>
+  </w:style>
+  <w:style w:type="paragraph" w:styleId="a6">
+    <w:name w:val="footer"/>
+    <w:basedOn w:val="a"/>
+    <w:link w:val="a7"/>
+    <w:uiPriority w:val="99"/>
+    <w:unhideWhenUsed/>
+    <w:rsid w:val="000A7B7B"/>
+    <w:pPr>
+      <w:tabs>
+        <w:tab w:val="center" w:pos="4677"/>
+        <w:tab w:val="right" w:pos="9355"/>
+      </w:tabs>
+      <w:spacing w:after="0" w:line="240" w:lineRule="auto"/>
+    </w:pPr>
+  </w:style>
+  <w:style w:type="character" w:customStyle="1" w:styleId="a7">
+    <w:name w:val="Нижний колонтитул Знак"/>
+    <w:basedOn w:val="a0"/>
+    <w:link w:val="a6"/>
+    <w:uiPriority w:val="99"/>
+    <w:rsid w:val="000A7B7B"/>
+  </w:style>
 </w:styles>

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

Посмотрим теперь собственно на сам нижний колонтитул (часть пространств имён опущена для читабельности, но в документе они должны быть):

<w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:p w:rsidR="000A7B7B" w:rsidRDefault="000A7B7B">
    <w:pPr>
      <w:pStyle w:val="a6"/>
    </w:pPr>
    <w:r>
      <w:t>123</w:t>
    </w:r>
  </w:p>
</w:ftr>

Тут виден текст 123. Единственное, что надо исправить — убрать ссылку на <w:pStyle w:val="a6"/>.

В результате анализа всех изменений делаем следующие предположения:

  • footnotes и endnotes не нужны
  • В [Content_Types].xml надо добавить footer
  • В word/_rels/document.xml.rels надо добавить ссылку на footer
  • В word/document.xml в тег <w:sectPr> надо добавить <w:footerReference>

Уменьшаем diff до этого набора изменений:

final diff

Затем запаковываем документ и открываем его.
Если всё сделано правильно, то документ откроется и в нём будет нижний колонтитул с текстом 123. А вот и итоговый коммит.

Таким образом процесс поиска изменений сводится к поиску минимального набора изменений, достаточного для достижения заданного результата.

Практика

Найдя интересующее нас изменение, логично перейти к следующему этапу, это может быть что-либо из:

  • Создания docx
  • Парсинг docx
  • Преобразования docx

Тут нам потребуются знания XSLT и XPath.

Давайте напишем достаточно простое преобразование — замену или добавление нижнего колонтитула в существующий документ. Писать я буду на языке Caché ObjectScript, но даже если вы его не знаете — не беда. В основном будем вызовать XSLT и архиватор. Ничего более. Итак, приступим.

Алгоритм

Алгоритм выглядит следующим образом:

  1. Распаковываем документ.
  2. Добавляем наш нижний колонтитул.
  3. Прописываем ссылку на него в [Content_Types].xml и word/_rels/document.xml.rels.
  4. В word/document.xml в тег <w:sectPr> добавляем тег <w:footerReference> или заменяем в нём ссылку на наш нижний колонтитул.
  5. Запаковываем документ.

Приступим.

Распаковка

В Caché ObjectScript есть возможность выполнять команды ОС с помощью функции $zf(-1, oscommand). Вызовем unzip для распаковки документа с помощью обёртки над $zf(-1):

/// Используя %3 (unzip) распаковать файл %1 в папку %2
Parameter UNZIP = "%3 %1 -d %2";

/// Распаковать архив source в папку targetDir
ClassMethod executeUnzip(source, targetDir) As %Status
{
    set timeout = 100
    set cmd = $$$FormatText(..#UNZIP, source, targetDir, ..getUnzip())
    return ..execute(cmd, timeout)
}

Создаём файл нижнего колонтитула

На вход поступает текст нижнего колонтитула, запишем его в файл in.xml:

<xml>TEST</xml>

В XSLT (файл — footer.xsl) будем создавать нижний колонтитул с текстом из тега xml (часть пространств имён опущена, вот полный список):

<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns="http://schemas.openxmlformats.org/package/2006/relationships" version="1.0">
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes" standalone="yes"/>
    <xsl:template match="/">

        <w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
            <w:p>
                <w:r>
                    <w:rPr>
                        <w:lang w:val="en-US"/>
                    </w:rPr>
                    <w:t>
                        <xsl:value-of select="//xml/text()"/>
                    </w:t>
                </w:r>
            </w:p>
        </w:ftr>
    </xsl:template>
</xsl:stylesheet>

Теперь вызовем XSLT преобразователь:

do ##class(%XML.XSLT.Transformer).TransformFile("in.xml", "footer.xsl", footer0.xml")    

В результате получится файл нижнего колонтитула footer0.xml:

<w:ftr xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:p>
        <w:r>
            <w:rPr>
                <w:lang w:val="en-US"/>
            </w:rPr>
            <w:t>TEST</w:t>
        </w:r>
    </w:p>
</w:ftr>

Добавляем ссылку на колонтитул в список связей основного документа

Сссылки с идентификатором rId0 как правило не существует. Впрочем можно использовать XPath для получения идентификатора которого точно не существует.
Добавляем ссылку на footer0.xml c идентификатором rId0 в word/_rels/document.xml.rels:

XSLT

<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns="http://schemas.openxmlformats.org/package/2006/relationships"  version="1.0">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="no"  />
    <xsl:param name="new">
        <Relationship 
           Id="rId0" 
           Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer" 
           Target="footer0.xml"/>
    </xsl:param>

    <xsl:template match="/*">
        <xsl:copy>
            <xsl:copy-of select="$new"/>
            <xsl:copy-of select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Прописываем ссылки в документе

Далее надо в каждый тег <w:sectPr> добавить тег <w:footerReference> или заменить в нём ссылку на наш нижний колонтитул. Оказалось, что у каждого тега <w:sectPr> может быть 3 тега <w:footerReference> — для первой страницы, четных страниц и всего остального:

XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
version="1.0">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
    <xsl:template match="//@* | //node()">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="//w:sectPr">
        <xsl:element name="{name()}" namespace="{namespace-uri()}">
            <xsl:copy-of select="./namespace::*"/>
            <xsl:apply-templates select="@*"/>
            <xsl:copy-of select="./*[local-name() != 'footerReference']"/>
            <w:footerReference w:type="default" r:id="rId0"/>
            <w:footerReference w:type="first" r:id="rId0"/>
            <w:footerReference w:type="even" r:id="rId0"/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

Добавляем колонтитул в [Content_Types].xml

Добавляем в [Content_Types].xml информацию о том, что /word/footer0.xml имеет тип application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml:

XSLT

<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns="http://schemas.openxmlformats.org/package/2006/content-types"  version="1.0">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="no"  />
    <xsl:param name="new">
        <Override 
         PartName="/word/footer0.xml" 
         ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"/>
    </xsl:param>

    <xsl:template match="/*">
        <xsl:copy>
            <xsl:copy-of select="@* | node()"/> 
            <xsl:copy-of select="$new"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

В результате

Весь код опубликован. Работает он так:

do ##class(Converter.Footer).modifyFooter("in.docx", "out.docx", "TEST")

Где:

  • in.docx — исходный документ
  • out.docx — выходящий документ
  • TEST — текст, который добавляется в нижний колонтитул

Выводы

Используя только XSLT и ZIP можно успешно работать с документами docx, таблицами xlsx и презентациями pptx.

Открытые вопросы

  1. Изначально хотел использовать 7z вместо zip/unzip т… к. это одна утилита и она более распространена на Windows. Однако я столкнулся с такой проблемой, что документы запакованные 7z под Linux не открываются в Microsoft Office. Я попробовал достаточно много вариантов вызова, однако положительного результата добиться не удалось.
  2. Ищу XSD со схемами ECMA-376 версии 5 и комментариями. XSD версии 5 без комментариев доступен к загрузке на сайте ECMA, но без комментариев в нём сложно разобраться. XSD версии 2 с комментариями доступен к загрузке.

Ссылки

  • ECMA-376
  • Описание docx
  • Подробная статья про docx
  • Репозиторий со скриптами
  • Репозиторий с преобразователем нижнего колонтитула

Понравилась статья? Поделить с друзьями:
  • Файл word хранение временного файла
  • Файл word исчез с компьютера
  • Файл ods как открыть в excel 2010
  • Файл word источник данных
  • Файл word удалился как восстановить файл