Устройство формата DOCX, как его открыть на PHP для вывода данных
Сайт сегодня – это непросто странички, а в большинстве случаев целая система по обработке и генерации различных данных. Часто бывает необходимо вывести данные с сайта в какой-либо распространенный формат, например, в PDF, DOCX, CSV и т.д. Рассмотрим, как можно вывести данные в файл DOCX на PHP.
Немного о формате DOCX. Это расширение файлов для программы Microsoft Office, продукт Word. Microsoft Word представляет собой текстовый процессор, который предназначен для создания, просмотра и редактирования текстовых документов. Раньше Word в основном использовался двоичный формат сохранения файлов, расширение DOC. Но, на смену ему пришел более совершенный формат – DOCX. Как устроен DOCX?
DOCX – это просто архив, в котором содержатся все необходимые файлы для документа, сам документ хранится в формате XML. Это делает возможным легко открыть архив на PHP и вывести нужные данные в файл XML внутри контейнера DOCX. Чтобы лучше понять, что содержится в таком файле, можно взять любой архиватор и открыть с его помощью файл DOCX. Внутри Вы увидите определенную структуру из папок и файлов.
Основной интерес представляет собой папка word, в ней то и содержится основное содержимое файла DOCX. Как видно, все файлы и настройки в этом формате стремились сделать с расширением XML, это неспроста, ведь X на конце означает отношение к XML. На рисунке ниже можно увидеть содержимое папки word, главный файл здесь document.xml.
Именно файл document.xml и содержит весь основной контент документа DOCX. Работать с форматом XML достаточно просто при помощи любых средств, ведь этот формат напоминает обычный текст, только он четко структурирован, что позволяет легко обратиться в любую точку файла и изменить любые данные.
Чтобы открыть DOCX на PHP и записать туда нужные данные, можно использовать довольно простой код:
$docx = new ZipArchive();
if ($docx->open('path_to_file/file.docx') === true) {
$xml = $docx->getFromName('word/document.xml');
$xml = str_replace('[ИСКОМЫЙ ТЕКСТ]', 'ЗАМЕЩАЮЩИЙ ТЕКСТ', $xml);
$docx->addFromString('word/document.xml', $xml);
$docx->close();
}
Сначала создается объект ZIP архива, в который затем считывается содержимое DOCX, из DOCX извлекается контент document.xml. Затем происходит непосредственная запись данных в файл, просто ищется заранее подготовленное место в файле DOCX в виде токена [ИСКОМЫЙ ТЕКСТ] и на его место записываются любые данные. После выполнения этой операции, происходит запись обновленного document.xml в DOCX и архив закрывается.
Важно проследить за целостностью токенов, если текст заменятся таким способом. Сделать это можно достаточно просто. Сначала откройте нужный файл в Word и расставьте токены, желательно написать их в простом блокноте и затем вставлять на нужные позиции. После чего, сохраните файл DOCX и откройте его архиватором, найдите и откройте в нем document.xml – проверьте целостность токенов, они должны быть написаны слитно, без разрывов. Только в таком случае, возможна корректная замена токенов на нужный текст.
Таким образом, было рассмотрено устройство формата DOCX, а также показано, как можно легко записать данные в DOCX на PHP.
Последние статьи
- 09.07.22ИТ / Разное Конвертация офисных файлов DOC, DOCX, DOCM, RTF в форматы DOCX, DOCM, DOC, RTF, PDF, HTML, XML, TXT без потерь и изменения разметки
- 07.07.22ИТ / Безопасность Как защитить исходный код PHP, JS, HTML, CSS - обфускация, минимизация, сжатие и шифрование
- 06.07.22ИТ / Безопасность Подключение не защищено, проблема с Lets Encrypt - как исправить истекший 30.09.2021 DST Root CA X3, удалить его вручную и установить ISRG Root X1. Пример на MS Windows 7
- 08.07.21ИТ / Разное Как бесплатно сделать перевод для сайта без API, перевод документов в Google Translate
- 06.07.21ИТ / Разное Как сделать кнопку подписки на сайте, базу подписчиков и автоматическую рассылку