Разрыв страницы в word php
Вынуждена констатировать, что операция «Разрыв раздела» очень редко используется правильно.
По окончании урока вы сможете:
- Дать определение разрыву раздела
- Установить разрыв раздела со следующей страницы
- Сделать альбомную ориентацию страницы двумя способами
1. Понятие «Разрыв раздела»
Какие свойства имеет документ? Это:
- Границы печатного поля
- Колонтитул (это мы выяснили на уроке 38)
- Ориентация страницы (книжная или альбомная)
- Набор стилей текста
Я не упоминаю такие свойства, как автор документа, количество знаков, страниц и так далее.
По ходу создания документа мы можем создавать новые стили текста (разумеется, не увлекаясь), но вот границы печатного поля, ориентация страницы и колонтитулы задаются на ВЕСЬ документ.
А как быть, если необходима страница в альбомном варианте, например, в документе есть большая таблица, которая отлично будет читаться именно в альбомном варианте:
Для этого есть возможность создания в документе несколько разделов.
Образно можно представить, что мы разрезаем документ на несколько частей и каждой части задаем свои параметры разметки страницы, ориентации страницы, колонтитулы с меняющейся информацией. |
Команда «Разрыв раздела» находится на ленте Разметка страницы → группа команд Параметры страницы → команда Разрывы → выпадающее меню → второй раздел выпадающего меню Разрывы разделов → 4 вида разделов:
Рассмотрим подробнее виды разрывов разделов:
2. Разрыв раздела со следующей страницы
Шаг 1. Устанавливаем курсор в месте создания нового раздела
Шаг 2. Устанавливаем разрыв раздела со следующей страницы (Разметка страницы → группа команд Параметры страницы → команда Разрывы → выпадающее меню → второй раздел выпадающего меню Разрывы разделов → команда Следующая страница)
Шаг 3. Задаем альбомную ориентацию страницы (лента Разметка страницы → группа команд Параметры страницы → команда Ориентация → команда Альбомная из выпадающего меню):
Получили такую картину:
А если нам нужно показать в альбомной ориентации несколько страниц и эти страницы находятся в середине документа?
3. Альбомная ориентация для части страниц (1 способ)
Скачайте документ тут. Это знакомый вам из предыдущих уроков документ. Я только убрала режимы «Абзац с новой страницы» и Абзац не отрывать от следующего». Откройте документ. Текст, который будет располагаться на страницах альбомной ориентации, я покрасила красным цветом.
Шаг 1. Выделяем весь текст красного цвета (Урок 2).
Шаг 2. Открываем диалоговое окно «Параметры страницы» (лента Разметка страницы → группа команд Параметры страницы → команда Настраиваемые поля из выпадающего меню):
Шаг 3. Задаем в диалоговом окне «Параметры страницы» альбомную ориентацию для выделенного текста:
Шаг 4. Масштабируем документ, чтобы наглядно убедится в том, что для части текста выбрана альбомная ориентация (Лента Вид → группа команд Масштаб → диалоговое окно Масштаб → радиокнопка «несколько страниц» → выпадающее меню → количество страниц):
Я выбрала по 4 странице в каждой полосе:
Вы увидели, что получилось два разрыва страницы, а между ними страницы в альбомной ориентации?
Убедились? Верните масштаб «По ширине странице» (кнопка «По ширине страницы» на панели быстрого доступа. Если вам не лень, то можете сделать то же самое через ленту, но через панель быстрого доступа быстрее. Но это в том случае, если панель быстрого доступа у вас настроена (Урок 18 и Урок 19):
4. Альбомная ориентация для части страниц (2 способ)
Шаг 1. Находим в документе текст синего цвета и устанавливаем курсор перед последним перед этим текстом символом конца абзаца:
Шаг 2. Задаем разрыв раздела (лента Разметка страницы → группа команд Параметры страницы → команда Разрывы → выпадающее меню → второй раздел выпадающего меню Разрывы разделов → Следующая страница). Смотрите самую первую картинку этого урока. Но еще лучше и быстрее воспользуемся панелью быстрого доступа:
Но это в том случае, если вы установили панель быстрого доступа (Урок 19). Давайте прикинем: 6 действий в первом случае против одного действия во втором случае. Я убедила вас работать с панелью быстрого доступа?
Шаг 3. Устанавливаем курсор перед последним символом конца абзаца синего текста и задаем разрыв раздела:
А теперь внимательнее. Я уменьшила масштаб документа, чтобы окинуть взглядом плоды трудов наших:
Мы сделали четыре разрыва, в результате которых получили 5 разделов:
- Первый раздел состоит из одной страницы книжной ориентации
- Второй раздел состоит из трех страниц альбомной ориентации
- Третий раздел состоит из одной страницы книжной ориентации
- Четвертый раздел состоит из одной страницы пока ещё книжной ориентации
- Пятый раздел состоит из оставшихся страниц книжной ориентации
Так как мы сделали четвертый разрыв раздела, то наш курсор перескочил на пятый раздел. Следовательно, если мы начнем менять параметры страницы, то изменения будут именно в пятом разделе. Чтобы понять, что мы находимся на пятом разделе, давайте посмотрим на темную полосу внизу документа. Эта полоса называется «Строка состояния» и содержит важную информацию:
- Номер раздела
- Номер страницы (на которой в данный момент находится курсор) из общего числа страниц в документе
- Число слов
- Язык проверки правописания (стоит «Русский», но мы можем задать другой язык проверки правописания)
- Разделы в документе могут состоять из любого количества страниц
- Изменения параметров страницы действительны только для того раздела, на котором находится текстовый курсор
- Параметры страницы меняются в пределах одного раздела
Шаг 4. Щелкаем в любом месте четвертого раздела и задаем альбомную ориентацию (лента Разметка страницы → группа команд Параметры страницы → команда Ориентация → команда Альбомная из выпадающего меню):
А теперь я промасштабировала документ:
А теперь давайте подумаем, какой способ создания альбомной ориентации наиболее удобен? Полагаю, вы скажете: первый способ! Для меня без разницы, потому что я работаю с панелью быстрого доступа: все нужные мне команды в шаговой доступности.
Библиотека 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, поскольку:
Механизм шаблонов должен работать быстрее, так как основная структура документа уже создана до выполнения сценария 5)
Шаблон может быть создан в самой свежей версии Microsoft Word и будет учитывать все возможные изменения внесенные создателями программы
В случае, если в зависимости от исходных данных документ может иметь несколько разных представлений, можно создать ровно такое же число разных шаблонов
То есть в худшем случае существует конечное число возможных видов генерируемого документа, а в лучшем случае все документы выглядят одинаково, меняются только пользовательские данные.
Below are the matrix of element availability in each container. The column shows the containers while the rows lists the elements.
Num | Element | Section | Header | Footer | Cell | Text Run | Footnote |
---|---|---|---|---|---|---|---|
1 | Text | v | v | v | v | v | v |
2 | Text Run | v | v | v | v | ||
3 | Link | v | v | v | v | v | v |
4 | Title | v | ? | ? | ? | ? | ? |
5 | Preserve Text | ? | v | v | v* | ||
6 | Text Break | v | v | v | v | v | v |
7 | Page Break | v | |||||
8 | List | v | v | v | v | ||
9 | Table | v | v | v | v | ||
10 | Image | v | v | v | v | v | v |
11 | Watermark | v | |||||
12 | OLEObject | v | v | v | v | v | v |
13 | TOC | v | |||||
14 | Footnote | v | v** | v** | |||
15 | Endnote | v | v** | v** | |||
16 | CheckBox | v | v | v | v | v | |
17 | TextBox | v | v | v | v | ||
18 | Field | v | v | v | v | v | v |
19 | Line | v | v | v | v | v | v |
20 | Chart | v | v |
- v . Available.
- v* . Available only when inside header/footer.
- v** . Available only when inside section.
- - . Not available.
- ? . Should be available.
Texts¶
Text can be added by using addText and addTextRun methods. addText is used for creating simple paragraphs that only contain texts with the same style. addTextRun is used for creating complex paragraphs that contain text with different style (some bold, other italics, etc) or other elements, e.g. images or links. The syntaxes are as follow:
- $text . Text to be displayed in the document.
- $fontStyle . See Font .
- $paragraphStyle . See Paragraph .
For available styling options see Font and Paragraph .
If you want to enable track changes on added text you can mark it as INSERTED or DELETED by a specific user at a given time:
Titles¶
If you want to structure your document or build table of contents, you need titles or headings. To add a title to the document, use the addTitleStyle and addTitle method. If depth is 0, a Title will be inserted, otherwise a Heading1, Heading2, …
- depth .
- $fontStyle . See Font .
- $paragraphStyle . See Paragraph .
- $text . Text to be displayed in the document. This can be string or a PhpOfficePhpWordElementTextRun
It’s necessary to add a title style to your document because otherwise the title won’t be detected as a real title.
Links¶
You can add Hyperlinks to the document by using the function addLink:
- $linkSrc . The URL of the link.
- $linkName . Placeholder of the URL that appears in the document.
- $fontStyle . See Font .
- $paragraphStyle . See Paragraph .
Preserve texts¶
The addPreserveText method is used to add a page number or page count to headers or footers.
Breaks¶
Text breaks¶
Text breaks are empty new lines. To add text breaks, use the following syntax. All parameters are optional.
- $breakCount . How many lines.
- $fontStyle . See Font .
- $paragraphStyle . See Paragraph .
Page breaks¶
There are two ways to insert a page break, using the addPageBreak method or using the pageBreakBefore style of paragraph.
Lists¶
Lists can be added by using addListItem and addListItemRun methods. addListItem is used for creating lists that only contain plain text. addListItemRun is used for creating complex list items that contains texts with different style (some bold, other italics, etc) or other elements, e.g. images or links. The syntaxes are as follow:
- $text . Text that appears in the document.
- $depth . Depth of list item.
- $fontStyle . See Font .
- $listStyle . List style of the current element TYPE_NUMBER, TYPE_ALPHANUM, TYPE_BULLET_FILLED, etc. See list of constants in PHPWord\Style\ListItem.
- $paragraphStyle . See Paragraph .
See Sample_09_Tables.php for more code sample.
You can also create your own numbering style by changing the $listStyle parameter with the name of your numbering style.
For available styling options see Numbering level .
Tables¶
To add tables, rows, and cells, use the addTable , addRow , and addCell methods:
Table style can be defined with addTableStyle :
For available styling options see Table .
Cell span¶
You can span a cell on multiple columns by using gridSpan or multiple rows by using vMerge .
See Sample_09_Tables.php for more code sample.
Images¶
To add an image, use the addImage method to sections, headers, footers, textruns, or table cells.
- $src . String path to a local image, URL of a remote image or the image data, as a string. Warning: Do not pass user-generated strings here, as that would allow an attacker to read arbitrary files or perform server-side request forgery by passing file paths or URLs instead of image data.
- $style . See Image .
Watermarks¶
To add a watermark (or page background image), your section needs a header reference. After creating a header, you can use the addWatermark method to add a watermark.
Objects¶
You can add OLE embeddings, such as Excel spreadsheets or PowerPoint presentations to the document by using addOLEObject method.
Table of contents¶
To add a table of contents (TOC), you can use the addTOC method. Your TOC can only be generated if you have add at least one title (See “Titles”).
- $fontStyle . See font style section.
- $tocStyle . See available options below.
- $minDepth . Minimum depth of header to be shown. Default 1.
- $maxDepth . Maximum depth of header to be shown. Default 9.
Options for $tocStyle :
- tabLeader . Fill type between the title text and the page number. Use the defined constants in \PhpOffice\PhpWord\Style\TOC .
- tabPos . The position of the tab where the page number appears in twip.
- indent . The indent factor of the titles in twip.
Footnotes & endnotes¶
You can create footnotes with addFootnote and endnotes with addEndnote in texts or textruns, but it’s recommended to use textrun to have better layout. You can use addText , addLink , addTextBreak , addImage , addOLEObject on footnotes and endnotes.
By default the footnote reference number will be displayed with decimal number starting from 1. This number uses the FooterReference style which you can redefine with the addFontStyle method. Default value for this style is array('superScript' => true) ;
The footnote numbering can be controlled by setting the FootnoteProperties on the Section.
Checkboxes¶
Checkbox elements can be added to sections or table cells by using addCheckBox .
- $name . Name of the check box.
- $text . Text to be displayed in the document.
- $fontStyle . See Font .
- $paragraphStyle . See Paragraph .
Textboxes¶
To be completed
Fields¶
Currently the following fields are supported:
See \PhpOffice\PhpWord\Element\Field for list of properties and options available for each field type. Options which are not specifically defined can be added. Those must start with a \ .
For instance for the INDEX field, you can do the following (See Index Field for list of available options ):
Line elements can be added to sections by using addLine .
Available line style attributes:
- weight . Line width in twip.
- color . Defines the color of stroke.
- dash . Line types: dash, rounddot, squaredot, dashdot, longdash, longdashdot, longdashdotdot.
- beginArrow . Start type of arrow: block, open, classic, diamond, oval.
- endArrow . End type of arrow: block, open, classic, diamond, oval.
- width . Line-object width in pt.
- height . Line-object height in pt.
- flip . Flip the line element: true, false.
Chart¶
Charts can be added using
For available styling options see Chart .
check out the Sample_32_Chart.php for more options and styling.
Comments¶
Comments can be added to a document by using addComment . The comment can contain formatted text. Once the comment has been added, it can be linked to any element with setCommentStart .
If no end is set for a comment using the setCommentEnd , the comment will be ended automatically at the end of the element it is started on.
Track Changes¶
Track changes can be set on text elements. There are 2 ways to set the change information on an element. Either by calling the setChangeInfo() , or by setting the TrackChange instance on the element with setTrackChange() .
© Copyright 2014-2021, PHPWord Contributors Revision aca10785 .
Versions latest stable develop Downloads pdf html epub On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
На момент написания данной статьи релиз PHPWord датируется 8 июля 2011 года. Да еще бета версия. Конечно старовата, но с другой стороны, если класс хорошо выполняет поставленную задачу, то почему бы и нет?!
К делу: скачиваем, подключаем обычным инклюдом и вперед.
Создаем экземпляр класса:
Необязательно, но можем добавить, что по-умолчанию используем шрифт Arial размером 14 пунктов.
Добавляем новый раздел в документ:
$section = $PHPWord->createSection([array $sectionStyle]);
По-умолчанию этот метод создает страницу A4 книжной ориентации. Поля: по 2,5 см верхнее, левое и правое и 2 см нижнее.
Массив $sectionStyle может содержать:
$sectionStyle = array(
'orientation' => 'landscape', // альбомная ориентация страницы
'marginTop' => '0', // по-умолчанию равен 1418* и соответствует 2,5 см отступа сверху
'marginLeft' => '0', // по-умолчанию равен 1418* и соответствует 2,5 см отступа слева
'marginRight' => '0', // по-умолчанию равен 1418* и соответствует 2,5 см отступа справа
'marginBottom' => '0', // по-умолчанию равен 1134* и соответствует 2 см отступа снизу
'pageSizeW' => '8419', // по-умолчанию равен 11906* и соответствует 210 мм по ширине
'pageSizeH' => '11906', // по-умолчанию равен 16838* и соответствует 297 мм по высоте
'borderColor'=>'999999', // Цвет ненужного бордюра
'borderSize'=>'100', // Ширина ненужного бордюра*
);
* В качестве единиц измерения тут используются типографские твипы. Для справки: 1 твип равен 1/567 см.
Текст
У нас есть пустая страница. Для начала добавим обычную текстовую строку. Для этого существует метод addText() и два синтаксиса:
$section->addText(string $text[, array $textStyle]);
// или
$section->addText(string $text[, string $fontStyleName[, string $paragraphStyleName]]);
На практике выглядит это так:
$section->addText('Создание сайтов — Лаборатории WEB');
Тут стоит сделать замечание: автор PHPWord решил, что все, кто будет пользоваться его классом будут работать в кодировке отличной от UTF-8. Если просматривать код PHPWord, то там везде, как через мясорубку, все текстовые переменные проходят через utf8_encode(). Вот в моем случае это сыграло не на руку, потому что я как раз-то работаю с UTF-8.
Что делать, если вы тоже работаете с UTF-8? Варианта как минимум два:
- перед тем как отдать строки в PHPWord измените их кодировку на не UTF-8 с помощью iconv();
- прошерстите PHPWord и удалите все utf8_encode() оттуда.
Мной был выбран второй вариант.
Двигаемся дальше. Наведем «красоту» в тексте.
Первый вариант — это объявление всякой «красоты» непосредственно в методе addText().
$section->addText('Разработка сайтов — Лаборатория WEB', array(
'name' => 'Tahoma',
'color' => '990000',
'bold' => true,
'italic' => true,
'size' => 16,
));
Второй вариант — объединение набора «красот» в стиль.
$PHPWord->addFontStyle('fStyle', array(
'name' => 'Tahoma',
'color' => '990000',
'bold' => true,
'italic' => true,
'size' => 16,
));
$section->addText('Изготовление сайтов — Лаборатория WEB', 'fStyle');
Сейчас был задан стиль для шрифта, но можно задать стиль и для параграфа:
$PHPWord->addParagraphStyle('pStyle', array(
'align' => 'center',
'spaceBefore' => 100, // отступ сверху
'spaceAfter' => 100, // отступ снизу
'spacing' => 100, // межстрочный интервал
));
И использовать эти стили как совместно, так и по-отдельности:
$section->addText('Поддержка сайтов — Лаборатория WEB', 'fStyle', 'pStyle');
// или
$section->addText('Продвижение сайтов — Лаборатория WEB', null, 'pStyle');
Если вам нужно объединить в одном параграфе несколько текстовых блоков с разным форматированием, то для этого существует метод createTextRun():
$textrun = $section->createTextRun('pStyle');
$textrun->addText('Жирный', array(
'bold' => true
));
$textrun->addText('Курсив', array(
'italic' => true
));
$textrun->addText('Красный', array(
'color'=>'990000'
));
С текстом, вроде, все ясно. Перенос курсора на следующую строку:
$section->addTextBreak([int $number]); // В скобках указывается количество строк на которое нужно перейти. По-умолчанию $number = 1
Изображения
Изображения вставляются также просто, как и текст. Для этого используется метод addImage():
$section->addImage(string $srcLocalImage[, array $imageStyle]);
Массив $imageStyle может содержать:
$imageStyle = array(
'width' => '200', // в пикселях
'height' => '200', // в пикселях
'align' => 'center', // left || right || center
)
На практике это выглядит так:
Ссылки
Метод для добавления ссылки addLink ():
$section -> addLink ( string $url , [ string $text [ , string $linkFontStyle [ , string $paragraphStyle ] ] ] ) ;
Наведение «красоты» для ссылки:
$PHPWord->addLinkStyle('lStyle', array(
'name' => 'Tahoma',
'color' => '990000',
'bold' => true,
'italic' => true,
'size' => 16,
));
На практике это выглядит:
Таблицы
С таблицами немного сложнее. Для добавления таблицы на страницу используем метод addTable(). Как и в случае с текстом, для таблиц существует два синтаксиса. Первый выглядит так:
Массив $tableStyle может содержать:
$tableStyle = array(
'cellMarginTop' => 0, // отступ от ячейки сверху *
'cellMarginRight' => 0, // отступ от ячейки справа *
'cellMarginBottom' => 0, // отступ от ячейки снизу *
'cellMarginLeft' => 0, // отступ от ячейки слева *
);
cellMarginTop, cellMarginRight, cellMarginBottom, cellMarginLeft можно заменить одним cellMargin.
$table = $section->addTable([string $tableStyleName]);
Для того, чтобы назначить $tableStyleName, вызовем метод addTableStyle():
$PHPWord->addTableStyle(string $styleName, array $tableStyle[, array $firstRowTableStyle]);
Как можно понять из названия, массив $firstRowTableStyle отвечает за стили первой строки таблицы.
$word->addTableStyle('tStyle', array(
'borderSize' => 6,
'borderColor' => '999999',
'cellMarginTop' => 40,
'cellMarginRight' => 20,
'cellMarginBottom' => 40,
'cellMarginLeft' => 20,
), array(
'borderSize' => 12,
'borderColor' => '000000',
'cellMargin' => 80,
));
$table = $section->addTable('tStyle');
Тут мы назначили для ячеек всей таблицы ширину границы 6, цвет серый, с отступами 40 20 40 20. А для ячеек первой строки ширину границы 12, черного цвета с отступами 80 со всех сторон.
Теперь в таблицу нужно добавить строку. Для этого существует метод addRow ():
$table->addRow([int $rowHeight]); // $rowHeight — высота строки в твипах
И методом addCell () добавляем ячейку:
$cell = $table->addCell(int $cellWidth[, array $cellStyle]);
Здесь $cellWidth — ширина ячейки в твипах, а массив $cellStyle может содержать:
$cellStyle = array(
'valign' => 'center', // top || bottom || center || both
'textDirection' => PHPWord_Style_Cell:TEXT_DIR_BTLR, // PHPWord_Style_Cell:TEXT_DIR_BTLR || PHPWord_Style_Cell:TEXT_DIR_TBRL
'bgColor' => 'fafafa',
'borderTopSize' => 6,
'borderRightSize' => 6,
'borderBottomSize' => 6,
'borderLeftSize' => 6,
'borderSize' => 6, // вместо borderTopSize, borderRightSize, borderBottomSize, borderLeftSize
'borderTopColor' => '999999',
'borderRightColor' => '999999',
'borderBottomColor' => '999999',
'borderLeftColor' => '999999',
'borderColor' => '999999', // вместо borderTopColor, borderRightColor, borderBottomColor, borderLeftColor
);
Последнее, что нужно сделать — это добавить содержимое в новую ячейку (добавим текст). Сделать это можно двумя способами:
$cell = $table->addCell();
$cell->addText('Создание Langing Page — Лаборатория WEB');
// или
$table->addCell()->addText('Разработка Langing Page — Лаборатория WEB');
Списки
Добавление на страницу нумерованных и ненумерованных списков осуществляется методом addListItem():
$section->addListItem(string $text[, int $depth[, string $textStyle[, array $listStyle[, string $paragraphStyle]]]]);
Здесь $depth — глубина (вложенность) списка от 1 до 9, а массив $listType может состоять из:
$listType = array(
'listType' => PHPWord_Style_ListItem:TYPE_NUMBER, // одноуровневый нумерованный список
);
Также параметр 'listType' может принимать следующие значения:
- PHPWord_Style_ListItem:TYPE_NUMBER_NESTED — многоуровневый нумерованный список;
- PHPWord_Style_ListItem:TYPE_BULLET_FILLED — ненумерованный список с маркерами в виде закрашенных кругов;
- PHPWord_Style_ListItem:TYPE_BULLET_EMPTY — ненумерованный список с маркерами в виде незакрашенных кругов;
- PHPWord_Style_ListItem:TYPE_SQUARE_FILLED — ненумерованный список с маркерами в виде закрашенных квадратов.
Колонтитулы
При работе с колонтитулами нужно помнить, что они привязываются к разделу и выглядят одинаково на всех страницах, относящихся к одному и тому же разделу.
Создадим верхний и нижний колонтитулы и добавим в них содержимое:
$header = $section->createHeader();
$header->addText('Лаборатория WEB');
Метод addPreserveText() существует специально для добавления номеров страниц.
Разное
$meta = $PHPWord->getProperties();
$meta->setTitle('Название');
$meta->setSubject('Тема');
$meta->setCreator('Автор');
$meta->setCompany('Учреждение');
$meta->setDescription('Заметки');
$meta->setCategory('Группа');
$meta->setLastModifiedBy('Автор изменений');
$meta->setKeywords('Ключевые слова');
$meta->setCreated(time()); // Дата и время создания документа
$meta->setModified(time()); //Дата и время последнего изменения документа
Сохранение файлов
В файл на жесткий:
$writer = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$writer->save('document.docx');
Вывод вопроса на скачивание:
header("Content-Type: application/msword");
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment;filename="document.docx"');
header('Cache-Control: max-age=0');
$writer = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$writer->save('php://output');
Я не могу найти согласованный метод для создания разрыва страницы, который будет работать в word, internet explorer и chrome.
после возиться со словом я обнаружил, что вы можете получить слово, чтобы добавить разрыв страницы с следующий:
проблема здесь в том, что internet explorer также видит это как разрыв страницы, поэтому, если вы объедините методы, Chrome и Word имеют разрывы страниц правильно, но Internet Explorer вставляет два разрыва страницы. Если вы используете только один, то chrome и explorer правы, а word нет и так далее.
Это соответствует вашим потребностям? (Обратите внимание, что они работают в обычном старом html. Я тестировал в Chrome и MS Word (вместе с IE), и они работали нормально.)
это разница между IE8 и IE9 (при условии, что IE9 находится в стандартном режиме), поэтому вам нужно как - то различать эти браузеры-либо с условным комментарием, либо с помощью CSS-Хака, такого как это:
(протестировано в Chrome, Firefox, OpenOffice Writer [надеюсь, адекватная замена Word] и IE 7,8,9)
для защиты от браузеров, которые применяют разрывы страниц на br и понимают :нет, вы можете добавить это, хотя я не знаю ни одного браузер, который нуждается в этом:
поместите соответствующий CSS !Т. е. условные комментарии. Все остальное можно оставить как есть.
Explorer обрабатывает все между