Php прочитать файл docx
Примеры сохранения и чтения текстовых данных и массивов в файлы.
Сохранение в файл
Функция 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. Внутри Вы увидите определенную структуру из папок и файлов.
Основной интерес представляет собой папка word, в ней то и содержится основное содержимое файла DOCX. Как видно, все файлы и настройки в этом формате стремились сделать с расширением XML, это неспроста, ведь X на конце означает отношение к XML. На рисунке ниже можно увидеть содержимое папки word, главный файл здесь document.xml.
Именно файл 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, поскольку:
Читайте также: