Прочитать содержимое файла phpword
Обновлено: 06.07.2024
Используя PHPWord, я пытаюсь выровнять правильное поле даты в шаблоне слова. $right = array('align' => 'right'); $objTextRun = $firstSection->addTextRun(array_merge($right, $singleLineHeight).
Я установил и установил PHP Word на PHPStorm (IDE). Я пытаюсь прочитать строку " учиться со вчерашнего дня, жить на сегодня, надеяться на завтра. " из документа Word под названием "helloWorld.doc.
Я использую PHPOffice/PHPWord в своем приложении Laravel. Он используется для создания документа.docx с результатами в таблицах. Это отлично подходит для документа из 3 таблиц с 6 строками, но когд.
Я использую phpword для записи документов, но теперь мне нужно написать мой документ в 2 столбцах. У меня есть набор текстов, которые я получаю в цикле. Я понял, что вы можете использовать атрибут .
$PHPWord = new PHPWord(); $section = $PHPWord->createSection(); $table = $section->addTable(); $i = 1; $document = $PHPWord->loadTemplate('/var/sitLims/web/uploads/lmsSyllabus/lmsSyllabus.
Я только начинаю работать с этим файлом класса и использую образец файла кода, но мой вывод включает нечетное число в начале выходного файла. Я не уверен, откуда она взялась. Может ли кто-нибудь по.
Мой PHP генерирует документ Word, но он не будет отображать возврат каретки. Мой CKEditor переводит возврат каретки в любой, <br>, or <div>asdf</div> Когда документ Word будет соз.
У меня проблема с использованием плагина phpword. Я пытаюсь изменить стиль, но я могу изменить фон ячейки, и другие параметры рассматриваются им. $styleTable = array('borderColor'=>'006699', 'bo.
Я загрузил пакет PHPWord_0.6.2_Beta.zip из этот сайт Есть 2 справочника: Примеры и PHPWord, и 1 файл: PHPWord.php Я поместил каталог PHPWord и PHPWord.php в application/third_party и создал новую б.
Я пытаюсь изменить плагин PHPWord, чтобы лучше соответствовать моим потребностям. Составив список разделов, которые имеет основной класс PHPWord, я могу сделать так, чтобы я мог вставлять разделы в.
Мне было интересно, есть ли в любом случае левый и правый выравнивать текст в одной строке. Так, например, в резюме будет указано название компании, выровненное слева, и дата, выровненная вправо, в.
PHPWord читает файлы docx с оберткой каждого w: r в новый абзац. кто-нибудь знает, как решить эту проблему? Буду признателен за любую помощь. Спасибо.
Мне нужно преобразовать пункт html taged в текстовый документ. Например, у меня есть такой текст <ul><li>One</li><li>Two</li><li>Three</li></ul> прео.
Я работаю над генератором отчетов, но поскольку PHPWord не заменяет изображения, я должен сначала создать для нуля шаблон, чтобы добавить логотип клиента. Таким образом, я могу создать и загрузить .
Я хочу прочитать текст из файла .docx за строкой и сохранить данные каждой строки в массиве, поскольку .docx - это zipped файл, который я хочу преобразовать в файл .doc чтобы я мог читать файл, исп.
Я пытаюсь создать docFiles на моем webapp. Сначала я думал об использовании какого-либо инструмента в Frontend, например, в инструменте jquery.wordexport.js от Markswindolls. Но поскольку функций, .
Я пытаюсь использовать PHPWord для создания текстового документа, который будет включать динамические данные, вытащенные из базы данных MySQL. База данных имеет кодировку MySQL: UTF-8 Unicode (utf8.
Я использовал phpword-плагин для создания текстовых файлов в моем проекте, но у меня есть проблема, что абзац не выравнивал центр, например: Но я хочу та
Я хотел бы сохранить значение базы данных в переменной. По какой-то причине он работает не так, как ожидалось. Ниже приведен код в контроллере: public function show(Word $word) < // $curriculum = C.
Хорошо, вот сценарий. Мне нужно создать около 200 документов MS Word на основе данных, собранных и сохраненных в моей базе данных. Пользовательский вариант создания документов документов с фотограф.
Я пытаюсь вставить сноску в свой сгенерированный документ с помощью phpword. Предположим следующее: $phpWord = new \PhpOffice\PhpWord\PhpWord(); $content tag-list"> phpword
Я пытаюсь использовать PHPWord для создания текстовых документов. И документ может быть сгенерирован успешно. Но есть проблема, когда мой сгенерированный документ будет сохранен на сервере. Как я м.
Я использую PHPWord для создания отчета, но я не нахожу способ сохранить заголовки таблиц на каждой странице. Проблема в том, что я не могу дать стиль ячейкам, и между заголовком и основной таблице.
Я хочу извлечь содержимое из файла docx во время загрузки, но я получаю эту ошибку: Объект класса PhpOffice\PhpWord\PhpWord не может быть преобразован в строку Any Solution, пожалуйста, дайте мне з.
Я использую PHPWord для редактирования документов Word. Как я могу использовать его для удаления всей страницы из документа?
Используя phpWord в моем приложении, я пытаюсь клонировать блок в шаблоне следующим образом: $
обычно, когда я запускаю этот запрос, он всегда будет извлекать все данные в таблице. но теперь он просто берет ряд данных в таблице. Я пытаюсь экспортировать данные в Microsoft Wor с помощью phpwo.
Я хочу сгенерировать и сохранить файл.rtf в laravel 5.2. Я могу сгенерировать PDF файл. Но я не могу найти решение для RTF. Может ли кто-нибудь сказать мне, есть ли библиотека или пакет для этого?
У меня есть PHP REST API, написанный с SLIM Framework, у меня есть api-вызов, который создает файл docx и принудительно загружает файл. $filename = 'invitation.docx'; $templateProcessor->save($f.
Я использую PhpWord, чтобы взять мой документ, сгенерированный PHP, и превратить его в документ Word. $phpWord = new \PhpOffice\PhpWord\PhpWord(); $html tag-list"> phpword
Я пытаюсь загрузить файл.docx с помощью PHPWord, установить в нем значение и сохранить файл. Проблема заключается в сохраненном файле, который выдается в виде документа с пустым словом размером 7 К.
Как добавить текстовый разрыв или перейти к следующей строке/строке во время прогона текста? Я попытался просто сделать $section->addTextBreak(2); в то время как в тексте, но он просто добавил р.
Я использую PHPWord для создания отчета. Когда я создаю раздел, он автоматически добавляет разрыв страницы, который я хочу. Есть ли способ удалить добавленный разрыв страницы? или Есть ли способ cr.
Я создаю файлы .docx из шаблона с помощью PHPWord . Он отлично работает, но теперь я хочу преобразовать сгенерированный файл в PDF . Сначала я попытался использовать tcpdf в комбинации с PHPWord $w.
Я создаю слово doc, используя PHPWord. Содержимое документа динамическое, а содержимое может содержать HTML-тег, например: <strong>Problem statement</strong> <p>The text may be<.
Рубрики
А так же делитесь знаниями, знакомьтесь с новыми утилитами и приложениями, учитесь у всегда готовых помочь ответить на самые сложные вопросы во всех сферах IT и программирования. Станьте гуру и экспертом разработки ПО, получите признание коллег, заработайте репутацию, создайте стартап или приложение которое будет работать на вас!
От автора: не так давно на нашем сайте был опубликован урок по созданию документов MS Word средствами языка PHP, и с использованием специальной библиотеки PHPWord. Но в комментариях к данному видео – прозвучал вопрос, как при помощи данной библиотеки читать готовые документы, что собственно и подтолкнуло меня к записи данного урока, в котором мы с Вами научимся, используя выше указанную библиотеку, читать ранее созданные документы MSWord.
В данном уроке мы продолжаем изучать возможности PHPWord, а именно рассмотрим инструменты по чтению готовых документов MS Word. Хотел бы отметить, что сегодня мы будем работать с уже установленной библиотекой, потому как это уже второй урок по данной теме, а значит, на основах подробно останавливаться не будем. Поэтому рекомендую, перед просмотром данного видео ознакомиться с первой часть урока – PHPWord — создание MS Word документов средствами PHP.
Итак, заготовка, тестового скрипта состоит из одного единственного файла index.php, в коде которого выполнена установка библиотеки.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Итак, заготовка, тестового скрипта состоит из одного единственного файла index.php, в коде которого выполнена установка библиотеки.
Для начала создадим переменную, в которой будет храниться путь к документу MSWord, с которым мы будем работать.
Далее, вспомним, что в начале работы с библиотекой необходимо создать объект главного класса PHPWord, но это в том случае если создается новый документ. Если же осуществляется чтение готового файла MS Word – объект указанного класса необходимо создать для интересующего документа, но перед этим его нужно прочитать.
Для чтения готовых документов в PHPWord предусмотрена группа классов, отвечающих за чтение документов различных форматов. А значит, первым делом создадим объект специального “класса-риддера“.
$ objReader = \ PhpOffice \ PhpWord \ IOFactory :: createReader ( 'Word2007' ) ;Далее, используя данный объект – выполним чтение документа формата MS Word.
Таким образом, по сути, задача урока выполнена, так как документ прочитан и его данные располагаются в структуре только что созданного объекта $phpWord. Но давайте поговорим о том, как же получить данные хранящиеся в объекте.
По официальной документации любая информация документа MS Word, согласно библиотеке PHPWord, располагается в отдельных секциях. При этом каждая секция содержит определенный набор элементов – текст, таблица, изображение, ссылка и т.д. Элементы – же в свою очередь, так же могут быть сложными и включать в себя некий набор вложенных элементов, к примеру таблицы.
Поэтому, вызывая на исполнение метод getSections(), мы получаем доступ к секциям документа, при этом в качестве результата будет возвращен массив, а значит мы его можем обойти циклом foreach().
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
При этом в коде цикла, для каждой секции, получим массив входящих элементов, вызывая на исполнение метод getElements(). Так как возвращаемое значение – это массив, значит, используя выше указанный цикл, мы можем получить доступ к каждой его ячейке.
При этом в переменной $e на каждой итерации цикла, содержится объект одного из элементов массива секций. Казалось бы, мы сразу можем получить текстовые данные MS Word, но для начала нужно проверить, что содержится в переменной $e.
if ( get_class ( $ e ) === 'PhpOffice\PhpWord\Element\TextRun' ) < $ objReader = \ PhpOffice \ PhpWord \ IOFactory :: createReader ( 'Word2007' ) ; if ( get_class ( $ e ) === 'PhpOffice\PhpWord\Element\TextRun' ) <Таким образом, для текущего документа, в переменную $text, попадает объект элемента Text, то есть элемент простейшего текст, для получения которого достаточно вызвать на исполнение метод getText(). Для получения информации о форматировании текущего элемента, необходимо обратиться к методу getFontStyle(), который вернет объект в закрытых свойствах которого содержится указанная информация. Соответственно для доступа к значениям этих свойств необходимо использовать специальные методы:
getSize() – размер шрифта;
getColor() – цвет текста;
getName() – имя шрифта.
Все содержимое документа, записывается в переменную $body, значение которой будет отображено на экране, используя шаблон. Пустые строки документа представляют собой объект элемента TextBreak, который можно обработать следующим образом:
else if ( get_class ( $ e ) === 'PhpOffice\PhpWord\Element\TextBreak' ) <Для обработки таблиц, придется добавить достаточно много строк кода, потому как таблица – это сложный элемент Table, который состоит из отдельных строк, а те в свою очередь из отдельных ячеек. И более того, каждая ячейка, может содержать еще вложенные элементы, потому как, к примеру в одной ячейке так же можно сформировать таблицу. Ниже приведу весь код, вместе с кодом обработки таблиц.
$ objReader = \ PhpOffice \ PhpWord \ IOFactory :: createReader ( 'Word2007' ) ; if ( get_class ( $ e ) === 'PhpOffice\PhpWord\Element\TextRun' ) < else if ( get_class ( $ e ) === 'PhpOffice\PhpWord\Element\TextBreak' ) < else if ( get_class ( $ e ) === 'PhpOffice\PhpWord\Element\Table' ) < if ( get_class ( $ celem ) === 'PhpOffice\PhpWord\Element\Text' ) < else if ( get_class ( $ celem ) === 'PhpOffice\PhpWord\Element\TextRun' ) <Для получения строк, необходимо вызвать метод getRows(), при этом в качестве результата будет возвращен массив объектов с информацией по каждой строке (элемент Row). Используя foreach(), обходим данный массив и для каждой строки получаем ячейки, при помощи метода getCells(). При этом опять же возвращается массив, который все так же мы обходим циклом. А далее для каждой ячейки вызываем на исполнение метод getElements(), для получения ее элементов. И так далее по принципу описанным выше.
Далее, осталось только отобразить значение переменной $body, любым удобным для Вас способом.
На этом данный урок я буду завершать. Как Вы видите, PHPWord предоставляет достаточно мощные инструменты по работе с документами MS Word, но и в тоже время сложные в плане получения данных из объектов.
Всего Вам доброго и удачного кодирования.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
Библиотека 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, поскольку:
Я установил и установил PHP Word на PHPStorm (IDE). Я пытаюсь прочитать строку " учиться со вчерашнего дня, жить на сегодня, надеяться на завтра. " из документа Word под названием "helloWorld.docx", используя PHPWord.
Это мой код для загрузки и чтения документа:
Полный вывод слишком длинный для публикации, но вы можете увидеть строку, которую я ищу в этом фрагменте, если вы прокрутите список вниз
мой основной вопрос: " Есть ли способ найти эту строку без использования var_dump и поиска через массивный вывод? "
Текстовая информация находится в свойствах [text] , которые, в свою очередь, вложены в свойства [elements] . Просто найдите их в объекте, который вы получаете в своем браузере, используя функцию "найти что-то в тексте" вашего браузера, чтобы увидеть текст, который вы ищете.
Эти два свойства защищены, поэтому вам нужно будет сделать их общедоступными, чтобы получить/извлечь их.
После того, как вы сделаете их public , вы можете начать отсекать каждый слой полученного вами объекта и тем самым получить доступ к объекту, где свойства [elements]->[text] - это всего лишь один слой вниз по "дереву".
Таким образом, алгоритм состоит в том, чтобы: 1) найти эти [text] свойства, 2) увидеть путь к объекту, содержащему эти свойства, 3) отрезать уровни и уровни более высокого уровня по уровню, 4) получить объект, где [elements]->[text] свойства - это только 2-й уровень, 5) собрать все значения свойств [text] в, скажем, в массиве.
Не пытайтесь использовать циклы foreach , рекурсивные функции и т.д., Пытаясь получить доступ к тексту. Результирующий объект огромен. Вам не хватит памяти или времени, чтобы это было возможно, чтобы перебирать, сглаживать, уменьшать и т.д. Такие большие многомерные ассоциативные массивы данных.
Кроме того, вы можете внести определенные изменения в файлы библиотеки PHPWord и не получить ненужные свойства и значения в результирующем объекте, который вы получаете при загрузке файла Word в PHPWord (стили, информация о параграфе и т.д.).
В PHPSpreadsheet они реализовали метод получения только фактических данных из файлов Excel (лишенных форматирования, информации стилей и т.д.). С другой стороны, PHPWord также объявлял свойство $readDataOnly , но они просто остановились и по какой-то причине не реализовали механизм для чтения фактических текстовых данных.
Читайте также: