Php прочитать файл docx

Обновлено: 06.07.2024

Примеры сохранения и чтения текстовых данных и массивов в файлы.

Сохранение в файл

Функция file_put_contents() записывает содержимое переменной в файл, если файла не существует. то пытается его создать, если существует то полностью перезапишет его.

File_put_contents:

Fopen / fwrite:

Набор функций fopen, fwrite, fclose предназначены для более гибкой работы с файлами.

  • fopen – открытие или создание файла.
  • fwrite – запись данных.
  • fclose – закрытие файла.

Возможные режимы fopen():

Mode Описание
r Открывает файл только для чтения, помещает указатель в начало файла.
r+ Открывает файл для чтения и записи, помещает указатель в начало файла.
w Открывает файл только для записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пробует его создать.
w+ Открывает файл для чтения и записи, помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует – пытается его создать.
a Открывает файл только для записи, помещает указатель в конец файла. Если файл не существует – пытается его создать.
a+ Открывает файл для чтения и записи, помещает указатель в конец файла. Если файл не существует – пытается его создать.
x Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт false и выдаст ошибку. Если файл не существует, попытается его создать.
x+ Создаёт и открывает для чтения и записи, в остальном имеет то же поведение, что и « x ».
c Открывает файл только для записи. Если файл не существует, то он создаётся. Если же файл существует, то он не обрезается (в отличие от « w »), и вызов к этой функции не вызывает ошибку (также как и в случае с « x »). Указатель на файл будет установлен на начало файла.
c+ Открывает файл для чтения и записи, в остальном имеет то же поведение, что и « c ».

Доступно в место fwrite() используют fputs() , разницы ни какой т.к. эта функция является псевдонимом.

Сайт сегодня – это непросто странички, а в большинстве случаев целая система по обработке и генерации различных данных. Часто бывает необходимо вывести данные с сайта в какой-либо распространенный формат, например, в PDF, DOCX, CSV и т.д. Рассмотрим, как можно вывести данные в файл DOCX на PHP.

Немного о формате DOCX. Это расширение файлов для программы Microsoft Office, продукт Word. Microsoft Word представляет собой текстовый процессор, который предназначен для создания, просмотра и редактирования текстовых документов. Раньше Word в основном использовался двоичный формат сохранения файлов, расширение DOC. Но, на смену ему пришел более совершенный формат – DOCX. Как устроен DOCX?

DOCX – это просто архив, в котором содержатся все необходимые файлы для документа, сам документ хранится в формате XML. Это делает возможным легко открыть архив на PHP и вывести нужные данные в файл XML внутри контейнера DOCX. Чтобы лучше понять, что содержится в таком файле, можно взять любой архиватор и открыть с его помощью файл DOCX. Внутри Вы увидите определенную структуру из папок и файлов.

docx-structure

Основной интерес представляет собой папка word, в ней то и содержится основное содержимое файла DOCX. Как видно, все файлы и настройки в этом формате стремились сделать с расширением XML, это неспроста, ведь X на конце означает отношение к XML. На рисунке ниже можно увидеть содержимое папки word, главный файл здесь document.xml.

docx-structure-word

Именно файл document.xml и содержит весь основной контент документа DOCX. Работать с форматом XML достаточно просто при помощи любых средств, ведь этот формат напоминает обычный текст, только он четко структурирован, что позволяет легко обратиться в любую точку файла и изменить любые данные.

Чтобы открыть DOCX на PHP и записать туда нужные данные, можно использовать довольно простой код:

Сначала создается объект ZIP архива, в который затем считывается содержимое DOCX, из DOCX извлекается контент document.xml. Затем происходит непосредственная запись данных в файл, просто ищется заранее подготовленное место в файле DOCX в виде токена [ИСКОМЫЙ ТЕКСТ] и на его место записываются любые данные. После выполнения этой операции, происходит запись обновленного document.xml в DOCX и архив закрывается.

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

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

Можно ли читать и записывать файлы Word (2003 и 2007) на PHP без использования COM-объекта? Я знаю, что можно сделать так:

$file = fopen('c:\file.doc', 'w+');

fwrite($file, $text);

fclose();

но Word будет читать его как HTML-файл, а не как собственный файл .doc.

Ответ 1

Чтение двоичных документов Word потребовало бы создания анализатора в соответствии с опубликованными спецификациями формата файлов DOC. Я думаю, что это не является реально выполнимым решением. Вы можете использовать форматы Microsoft Office XML для чтения и записи файлов Word — они совместимы с версиями Word 2003 и 2007. Для чтения необходимо убедиться, что документы Word сохранены в правильном формате (он называется Word 2003 XML-Document в Word 2007). Для записи достаточно следовать общедоступной XML-схеме. Я никогда не использовал этот формат для записи документов Office из PHP, но я использую его для чтения рабочего листа Excel (естественно, сохраненного как XML-Spreadsheet 2003) и отображения его данных на веб-странице. Поскольку файлы представляют собой обычные XML-данные, не составляет труда сориентироваться в них и понять, как извлечь нужные данные. Другой вариант — вариант только для Word 2007 (если форматы файлов OpenXML не установлены в вашем Word 2003) — это пересортировка в OpenXML. Формат файла DOCX — это просто ZIP-архив с включенными XML-файлами. На MSDN есть много ресурсов по формату файлов OpenXML, так что вы должны быть в состоянии понять, как читать нужные вам данные. Запись будет намного сложнее, я думаю , все зависит от того, сколько времени вы потратите на это. Возможно, вы можете взглянуть на PHPExcel — библиотеку, способную писать в файлы Excel 2007 и читать из файлов Excel 2007, используя стандарт OpenXML. Вы можете получить представление о работе, связанной с чтением и записью документов OpenXML Word.

Ответ 2

Данное решение работает с vs < office 2007 , и это чистый PHP б ез всякого COM:

<?php

/*****************************************************************

Этот подход использует обнаружение NUL (chr(00)) и конца строки (chr(13))

чтобы определить, где находится текст:

- разделяем содержимое файла на фрагменты по chr(13)

- отбрасываем все фрагменты, содержащие NUL

- сшиваем оставшиеся вместе

- очищаем с помощью регулярного выражения

*****************************************************************/

function parseWord($userDoc)

$fileHandle = fopen($userDoc, "r");

$line = @fread($fileHandle, filesize($userDoc));

$lines = explode(chr(0x0D),$line);

$outtext = "";

foreach($lines as $thisline)

$pos = strpos($thisline, chr(0x00));

if (($pos !== FALSE)||(strlen($thisline)==0))

> else

$outtext .= $thisline." ";

>

>

$outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext);

return $outtext;

>

$userDoc = "cv.doc";

$text = parseWord($userDoc);

echo $text;

?>

Ответ 3

Ответ 4

Ответ 5

Ответ 6

Используйте следующий класс непосредственно для чтения документа W ord:

class DocxConversion

private $filename;

public function __construct($filePath)

$this->filename = $filePath;

>

private function read_doc()

$fileHandle = fopen($this->filename, "r");

$line = @fread($fileHandle, filesize($this->filename));

$lines = explode(chr(0x0D),$line);

$outtext = "";

foreach($lines as $thisline)

$pos = strpos($thisline, chr(0x00));

if (($pos !== FALSE)||(strlen($thisline)==0))

> else

$outtext .= $thisline." ";

>

>

$outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext);

return $outtext;

>

private function read_docx()

$striped_content = '';

$content = '';

$zip = zip_open($this->filename);

if (!$zip || is_numeric($zip)) return false;

while ($zip_entry = zip_read($zip))

if (zip_entry_open($zip, $zip_entry) == FALSE) continue;

if (zip_entry_name($zip_entry) != "word/document.xml") continue;

$content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

zip_entry_close($zip_entry);

>// end while

zip_close($zip);

$content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);

$content = str_replace('</w:r></w:p>', "\r\n", $content);

$striped_content = strip_tags($content);

return $striped_content;

>

/************************excel sheet************************************/

function xlsx_to_text($input_file)

$xml_filename = "xl/sharedStrings.xml"; //content file name

$zip_handle = new ZipArchive;

$output_text = "";

if(true === $zip_handle->open($input_file))

if(($xml_index = $zip_handle->locateName($xml_filename)) !== false)

$xml_datas = $zip_handle->getFromIndex($xml_index);

$xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);

$output_text = strip_tags($xml_handle->saveXML());

>else

$output_text .="";

>

$zip_handle->close();

>else

$output_text .="";

>

return $output_text;

>

/*************************power point files*****************************/

function pptx_to_text($input_file)

$zip_handle = new ZipArchive;

$output_text = "";

if(true === $zip_handle->open($input_file))

$slide_number = 1; //loop through slide files

while(($xml_index = $zip_handle->locateName("ppt/slides/slide".$slide_number.".xml")) !== false)

$xml_datas = $zip_handle->getFromIndex($xml_index);

$xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);

$output_text .= strip_tags($xml_handle->saveXML());

$slide_number++;

>

if($slide_number == 1)

$output_text .="";

>

$zip_handle->close();

>else

$output_text .="";

>

return $output_text;

>

public function convertToText()

if(isset($this->filename) && !file_exists($this->filename))

return "File Not exists";

>

$fileArray = pathinfo($this->filename);

$file_ext = $fileArray['extension'];

if($file_ext == "doc" || $file_ext == "docx" || $file_ext == "xlsx" || $file_ext == "pptx")

if($file_ext == "doc")

return $this->read_doc();

> elseif($file_ext == "docx")

return $this->read_docx();

> elseif($file_ext == "xlsx")

return $this->xlsx_to_text();

>elseif($file_ext == "pptx")

return $this->pptx_to_text();

>

> else

return "Invalid File Type";

>

>

>

$docObj = new DocxConversion("test.docx"); //замените имя документа правильным расширением doc или docx

echo $docText= $docObj->convertToText();

Мы будем очень благодарны

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

Библиотека PHPWord, находящаяся уже почти год в стадии бета-тестирования 1) , предоставляет возможность создания сложных документов формата OOXML (*.docx). Рассмотрим основные возможности этой библиотеки. Для начала работы достаточно распаковать архив с библиотекой в каталог с создаваемым вами документом PHP и подгрузить основной класс библиотеки, расположенный в файле PHPWord.php:

Свойства документа и шрифт по-умолчанию

Создание документа начинается с объявления экземпляра класса PHPWord. Конструктор не требует передачи аргументов:

Далее следует задать название и размер шрифта по-умолчанию:

В рассматриваемой версии до применения указанных выше функций шрифтом по-умолчанию является Arial размером 20 пунктов. Теперь можно задать время создания документа, имя автора и так далее:

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

Создание разделов

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

Раздел может иметь книжную или альбомную ориентацию, настраиваемые поля (margins), настраиваемые цвета границ раздела и их толщину (на рисунке показана пунктиром):

Параметр Описание
orientation Ориентация страницы:
null - книжная ориентация,
landscape - альбомная
marginTop Размер верхнего поля во внутренних единицах
marginRight Размер правого поля во внутренних единицах
marginBottom Размер нижнего поля во внутренних единицах
marginLeft Размер левого поля во внутренних единицах
borderTopSize Толщина верхнего края рамки во внутренних единицах
borderRightSize Толщина правого края рамки во внутренних единицах
borderBottomSize Толщина нижнего края рамки во внутренних единицах
borderLeftSize Толщина левого края рамки во внутренних единицах
borderTopColor Цвет верхнего края рамки в шестнадцатеричном формате
borderRightColor Цвет правого края рамки в шестнадцатеричном формате
borderBottomColor Цвет нижнего края рамки в шестнадцатеричном формате
borderLeftColor Цвет левого края рамки в шестнадцатеричном формате

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

Указанные в таблице параметры могут быть переданы в виде массива при создании раздела.

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

Добавление текста

Добавление блока текста

Под блоком текста понимается отрывок текста, имеющий одинаковое форматирование (цвет, размер шрифта и т.п.). Для создания блока текста в выбранном разделе используйте функцию addText:

Здесь $text - добавляемый текст, необязательный параметр $fontStyle - имя определенного ранее текстового стиля, необязательный параметр $paragraphStyle - имя определенного ранее стиля абзаца.

Изменение форматирования текста

Форматирование текста, как и форматирование раздела, может осуществляться при его создании.

. или устанавливается после создания предназначенными для этого методами:

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

Параметр Описание
size Размер шрифта в типографских пунктах
name Название шрифта (кегль)
bold Является ли текст полужирным (true\false)
italic Выделен ли текст курсивом (true\false)
superScript Является ли текст надстрочным (true\false)
subScript Является ли текст подстрочным (true\false)
underline Вид подчеркивания 2) из набора констант PHPWord_Style_Font:
UNDERLINE_NONE - нет подчеркивания,
UNDERLINE_DASHHEAVY - жирная штриховая линия,
UNDERLINE_DASHLONG - удлиненная штриховая линия,
UNDERLINE_DASHLONGHEAVY - удлиненная жирная штриховая линия,
UNDERLINE_DOUBLE - двойная линия,
UNDERLINE_DOTHASH 3) - штрих-пунктир,
UNDERLINE_DOTHASHHEAVY - жирный штрих-пунктир,
UNDERLINE_DOTDOTDASH - две точки + тире,
UNDERLINE_DOTDOTDASHHEAVY - жирные две точки + тире,
UNDERLINE_DOTTED - пунктир,
UNDERLINE_DOTTEDHEAVY - жирный пунктир,
UNDERLINE_SINGLE - одинарная линия,
UNDERLINE_WAVY - волнистая линия,
UNDERLINE_WAVYDOUBLE - двойная волнистая линия,
UNDERLINE_WAVYHEAVY - тройная волнистая линия,
UNDERLINE_WORDS - подчеркивать только слова (не подчеркивать пробелы)
Color Цвет шрифта в шестнадцатеричном формате
fgColor Цвет выделения маркером из набора констант PHPWord_Style_Font:
FGCOLOR_YELLOW - желтый,
FGCOLOR_LIGHTGREEN - ярко-зеленый,
FGCOLOR_CYAN - бирюзовый,
FGCOLOR_MAGENTA - лиловый,
FGCOLOR_BLUE - синий,
FGCOLOR_RED - красный,
FGCOLOR_DARKBLUE - темно-синий,
FGCOLOR_DARKCYAN - сине-зеленый,
FGCOLOR_DARKGREEN - темно-зеленый,
FGCOLOR_DARKMAGENTA - фиолетовый,
FGCOLOR_DARKRED - темно-красный,
FGCOLOR_DARKYELLOW - коричнево-зеленый,
FGCOLOR_DARKGRAY - серый 50%,
FGCOLOR_LIGHTGRAY - серый 25%,
FGCOLOR_BLACK - черный

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

Cписок доступных параметров форматирования абзаца:

Параметр Описание
align Выравнивание текста в абзаце:
left - по левому краю,
right - по правому краю,
center - по центру,
both или justify - по ширине
spaceBefore Отступ абзаца сверху в твипсах
spaceAfter Отступ абзаца снизу в твипсах
spacing Интервал между строк в твипсах

Определение стилей текста и абзаца

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

Здесь $styleName - заданное вами имя стиля, $fontStyle - массив, содержащий определение стиля. После создания стиля его имя можно использовать при создании блоков текста, например:

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

Группировка блоков текста в абзац

Блоки текста с различным форматированием могут быть объединены в абзац заданного вида. Для этого применяется команда createTextRun:

Необязательный параметр $paragraphStyle - массив со стилем абзаца или название созданного ранее именованного стиля.

Добавление заголовков

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

Здесь $titleLevel - уровень заголовка, для которого задается стиль (обычно от 1 до 6), $fontStyle - массив со стилем форматирования заголовка, $paragraphStyle - массив со стилем форматирования абзаца. Как видите, форматирование можно не трогать, но сам стиль заголовка требуемого уровня должен быть обязательно создан. Добавление заголовка делается так:

По-умолчанию создается заголовок 1 уровня.

Добавление ссылок

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

Разрыв строки и страницы

Для принудительного переноса строки используйте синтаксис:

Необязательный параметр $num, по-умолчанию равный 1, указывает сколько переносов строки необходимо сделать. Для принудительной вставки разрыва страницы выполните:

Добавление оглавления

Для добавления оглавления используется функция addTOC:

Здесь $fontStyle - форматирование текста, определенное одним из ранее указанных способов, $tocStyle - массив со стилем оформления оглавления, возможные параметры которого приведены в таблице: ^ Параметр ^ Описание ^

tabLeader Заполнитель между заголовком и номером страницы из набора констант PHPWord_Style_TOC :
TABLEADER_DOT - точки,
TABLEADER_UNDERSCORE - символ подчеркивания,
TABLEADER_LINE - линия,
TABLEADER_NONE - нет заполнителя
tabPos Положение номера страницы в твипсах
Indent Отступ заголовков в твипсах

Добавление списков

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

Здесь $text - текст добавляемого элемента списка, $depth - глубина вложенности элемента в списке (от 1 до 9, по-умолчанию равна 1), $textStyle - форматирование текста списка одним из предложенных ранее способов, $listStyle - форматирование самого списка при помощи массива параметров, $paragraphStyle - форматирование абзаца. На данный момент не существует функции addListStyle, поскольку у списков пока может изменяться только один параметр:

Параметр Описание
listType Вид списка из набора констант PHPWord_Style_ListItem:
TYPE_NUMBER - одноуровневый нумерованный список,
TYPE_NUMBER_NESTED - многоуровневый нумерованный список,
TYPE_BULLET_FILLED - ненумерованный список с маркерами в виде закрашенных кругов,
TYPE_BULLET_EMPTY - ненумерованный список с маркерами в виде незакрашенных кругов,
TYPE_SQUARE_FILLED - ненумерованный список с маркерами в виде закрашенных квадратов

Добавление таблиц

Важной частью документа Word являются таблицы. Для создания таблицы в PHPWord выполните:

Необязательный аргумент $tableStyle - массив с описанием стиля таблицы или название такового, определенного методом addTableStyle:

Аргументы: $styleName - название стиля, $tableStyle - массив с определением стиля, $firstRowStyle - массив с определением стиля ячеек 1 строки (шапки) таблицы. Ниже приведена таблица возможных стилевых параметров таблицы в целом: ^ Параметр ^ Описание ^

cellMarginTop Отступ от ячейки сверху в твипсах
cellMarginRight Отступ от ячейки справа в твипсах
cellMarginBottom Отступ от ячейки снизу в твипсах
cellMarginLeft Отступ от ячейки слева в твипсах

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

. затем добавить ячейки и заполнить их форматированным текстом.

. или сделать то же самое одной командой.

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

Команда Действие
addText Добавить форматированный текст
addTextBreak Добавить перенос строки
addLink Добавить ссылку
addListItem Добавить элемент списка
addImage Добавить изображение из файла
addMemoryImage Добавить динамически сгенерированное изображение
addObject Добавить объект OLE
addPreserveText Добавить поле (например, нумерацию страниц)

Как вы уже, наверное, догадались, параметр $rowHeight - позволяет задать высоту в твипсах создаваемой строки, $cellWidth - ширину ячейки (столбца), а $cellStyle - изменить форматирование ячейки. При форматировании ячейки поддерживаются следующие параметры:

Параметр Описание
valign Выравнивание в ячейке по-вертикали: both - по-вертикали по ширине,
top - по верхнему краю,
bottom - по нижнему краю,
center - по-центру
textDirection Направление текста из набора констант PHPWord_Style_Cell:
TEXT_DIR_BTLR - развернут на 90 градусов против часовой стрелки,
TEXT_DIR_TBRL - развернут на 90 градусов по часовой стрелке
bgColor Цвет фона ячейки в шестнадцатеричном формате
borderTopSize Толщина верхней границы ячейки в твипсах
borderRightSize Толщина правой границы ячейки в твипсах
borderBottomSize Толщина нижней границы ячейки в твипсах
borderLeftSize Толщина левой границы ячейки в твипсах
borderTopColor Цвет верхней границы ячейки в шестнадцатеричном формате
borderRightColor Цвет правой границы ячейки в шестнадцатеричном формате
borderBottomColor Цвет нижней границы ячейки в шестнадцатеричном формате
borderLeftColor Цвет левой границы ячейки в шестнадцатеричном формате

Добавление изображений

PHPWord позволяет добавлять в создаваемый документ изображения 2 типов: из файла (метод addImage) и динамически сгенерированное сценарием изображение (метод addMemoryImage). Поддерживаются файлы форматов jpg, png, gif, tiff, bmp. Примеры применения методов:

Здесь $src и $url - соответственно путь к файлу и абсолютный путь к сценарию (с адресом сайта и промежуточных каталогов), $imageStyle - массив с форматированием изображения. Поддерживаемые параметры форматирования:

Параметр Описание
width Требуемая ширина изображения в пикселях
height Требуемая высота изображения в пикселях
align Горизонтальное выравнивание изображения:
left - по левому краю,
right - по правому краю,
center - по центру

Если требуемые размеры изображения не указаны - библиотека пытается определить фактические размеры изображения при помощи функции [php>getimagesize|getimagesize]].

Добавление объектов OLE

С помощью метода addObject вы можете внедрить в создаваемый документ фрагмент другого документа (*.docx, *.xlsx, *.pptx) при помощи технологии OLE:

Массив $objectStyle может содержать только один параметр:

Параметр Описание
align Выравнивание объекта по-горизонтали:
left - по левому краю,
right - по правому краю,
center - по центру

Колонтитулы

Каждый раздел документа может иметь свой верхний (header) и нижний (footer) колонтитул, отображаемый на всех принадлежащих ему страницах. С точки зрения Word колонтитул является особым видом раздела, поэтому к колонтитулу применимо большинство описанных выше методов: addText, createTextRun, addTextBreak, addImage, addMemoryImage, addListItem, addTable. Кроме этого колонтитул имеет собственный метод addPreserveText, позволяющий создавать нумерацию страниц. Пример создания верхнего (createHeader) и нижнего (createFooter) колонтитула:

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

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

Библиотека PHPWord поддерживает еще один интересный метод создания документов Word - использование шаблонов. Подробный принцип работы при генерировании документов из шаблонов описан в статье docx-templates. В качестве метки в PHPWord используется комбинация $ , где NAME - имя метки. Пример генерирования с использованием меток:

Сохранение файла

Сохранение файла на жесткий диск:

Пример

Подытоживая все вышесказанное хочется привести пример, в котором проиллюстрировано применение большинства возможностей библиотеки PHPWord:

Текст примера появится несколько позже, когда автор сможет сгенерировать документ с кириллицей (на английском работает). Проблема связана с функцией utf8_encode, используемой в PHPWord. Если у вас есть решение этой проблемы, просьба отписаться. Update! Проблема с функцией utf8_encode и кириллической кодировкой решается если заменить функцию на iconv и указать входящую кодировку CP1251 и выходе UTF8. Сделать это надо во всех местах библиотеки где используется функция utf8_encode.

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

Читайте также: