Формирование word документа php

Честная генерация DOCX на PHP. Часть 1

Здравствуйте, уважаемое хабрасообщество! Как-то раз был на хабре интересный материал про генерацию doc-файлов средствами PHP. К сожалению, больше на хабре ничего на эту тему я не нашел. На тот момент я разработал собственное решение.
Оно состояло в том, чтобы генерировать .docx файлы. Аргументы были следующие:

Структура файла

Возле скрипта должен появиться файл Example.docx При этом не забываем создать саму структуру файлов. Для её получения пользуемся пресловутым MS Office и Winrar’ом. После сборки пробуем открыть в через MS Office. В случае незначительных ошибок в XML ворд выдаст предупреждение, что в документе содержатся ошибки, но и предложит их исправить. Если же документ собран совсем неправильно, ворд лишь ругнется и откажется открывать.

Вставляем текст

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

Нетрудно понять, что нужно изменить, чтобы получить требуемое выравнивание и размер текста. В тег w:t вставляем наш текст, но без переноса строк!
Вводим в наш класс метод assign, и генератор становится таким:

Вот в принципе и всё. В следующий раз мы научимся вставлять изображения.
Просто, не правда ли? Весь код с примером.
UPD. Сделал подсветку кода.
UPD 2. Читайте продолжение.

Источник

Шаблонный DOCX на PHP

В общем, долго лазил по форумам, смотрел различные варианты, но так и не понял, как реализовать шаблонных DOCX-документа на php странице. Идея такая:
1) Есть php страница с текстом (допустим это текст договора или отчет)
2) В документе есть поля для ввода значений, или выбора из базы данных (переключатели)
3) возможно сохранить этот документ уже с новыми значениями.

p.s. если можно на примитивно-пигмейском, голова уже взрывается

Помощь в написании контрольных, курсовых и дипломных работ здесь.

PHP + docx
Приветствую всех! Дали задание в ВУЗе, примерно следующее: «Сделать web-формы с элементами.

Есть ли PHP библиотека для работы с файлами doc и docx?
Есть ли PHP библиотека для работы с файлами doc и docx? Если нет, то как сформировать файл.

Используя PHP считать doc/docx файл и сгенерировать его в PDF
Я использую composer и подключаю 2 библиотеки : PHPWord Dompdf Возник вопрос, как.

Создание/склеивание doc\docx файла из шаблона doc\docx с заменой ключевых слов
Подскажите, как можно такое реализовать? Я узнал, что в rtf нельзя делать разрыв страницы, а.

Решение

Зачем по форумам лазить когда есть офф. доки?
Вот библиотека.
Примеры там указаны, но вдруг и это не найдете. Примеры.

Я в свое время писал обертку под этот класс.

по-другому не получалось, ругалось, что его нет.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

php скрипт HTML в DOC или DOCX
Может кто нибудь знает где взять нормальный скрипт для сабжа обрыл весь интернет, нашел всего.

Шаблонный класс
Доброго времени суток. Опять пишу здесь(( помогите ребятки.Сидел много над проблемой и честное.

Шаблонный класс
Я запутался с шаблонами. Не пойму никак как вызвать конструктор с введенным в функции check_int().

Источник

Создание печатной формы Microsoft Word с помощью PHP

Предыстория
Мой вариант решения

И вот с этими колонтитулами и возникла проблема. Я не смог найти простого решения с использованием HTML javascript. С помощью HTML можно управлять расположением блоков при печати, переносить блок если он не входит целеком и все в таком духе. Как посчитать примерный конец страницы и уместить там блок с колонтитулом (с помощью javascript) я тоже представляю слабо, поскольку существует достаточно много нюансов на стороне пользователя. Поэтому было принято пойти немного иным путем, а именно связаться с Microsoft Word.
Слава руководству этой организации, на каждой рабочей станции установлен Microsoft Office 2007.

Читайте также:  мужская энергия в женщине что это значит

Итак, был собран шаблон в Word’е, который содержал полностью заполненное коммерческое предложение, с автомтически формируемыми полями и колонтитулами. Оставалось только подставить в нужные места данные клиента, таблицу со спецификацией товара и контакты менеджера. Как это сделать?

Я не стал использовать сторонние библиотеки, оказалось достаточно того, что документ Microsoft Word (речь идет про *.docx) представляет собой ничто иное, как обычный zip с кучей xml-файлов и прочих ресурсов типа картинок. Распаковав docx мы получаем следующее:

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

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

Если не портить xml то пользователь получит, полностью валидный документ. Если по невнимательности намудрить, то при открытии Word выругается на вас о наличии недопустимых символов, скажет где именно, и попытается исправить.
Можно добавлять любую информацию, например таблицы.
Ячейку таблицы можно легко вычислить (как и целую строку):

Ну вот собственно и все.
Если знаете другие способы как решить даную проблему, поделитесь пожалуйста.
Буду очень признателен.

Источник

Генерируем документы Microsoft Word на PHP

В данной статье мы рассмотрим простую интеграцию между Word и PHP: генерацию документа Microsoft Word на основе полей ввода в HTML-форме с помощью PHP (и его расширения Interop).

Подготовительные шаги

Первым делом убедимся, что у нас настроено базовое окружение WAMP. Так как Interop присутствует только в Windows, то нам необходимо, чтобы наш сервер Apache и инсталляция PHP были развернуты на Windows машине. В этом качестве я использую EasyPHP 14.1, который крайне прост в установке и настройке.

Следующим делом необходимо установить Microsoft Office. Версия не очень важна. Я использую Microsoft Office 2013 Pro, но любая версия Office старше 2007 должна подойти.

Здесь можно увидеть элемент Microsoft.Office.Interop.Word (подчеркнут на скриншоте). Это будет та сборка, которую мы будем использовать в нашей демонстрации. Пожалуйста, обратите особое внимание на поля “Assembly name (Имя сборки)”, “Version (Версия)” и “Public key token (Токен публичного ключа)”. Их мы скоро будем использовать в нашем PHP скрипте.

В этой директории также присутствуют и другие сборки (включая и все семейство Office), доступные для использования в своих программах (не только для PHP, но также и для VB.net, C#, и т.д.).

Замечание: к загрузке и установке доступен только дистрибутив PIA Microsoft Office 2010. Версия сборок в этом пакете 14.0.0, а 15 версия поставляется только с Office 2013.

И, наконец, необходимо включить расширение php_com_dotnet.dll в php.ini и перезапустить сервер.

Теперь можно перейти к программированию.

Читайте также:  программа обучения сборщик достройщик судовой

HTML форма

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

У нас есть текстовое поле для имени, группа переключателей для пола, слайдер для возраста, и область ввода текста для ввода сообщения, а также небезызвестная кнопка “Отправить”.

Серверная часть

Манипулятор COM в PHP требует создания экземпляра класса в рамках “сборки”. В нашем случае мы работаем с Word. Если взглянуть на первый скриншот, то можно записать полную сигнатуру сборки для Word:

Установив два этих параметра мы сможем получить объект для работы с Word.

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

Самым неправильным было бы жестко прописать содержимое документа в PHP, а потом вывести его в документ Word. Я настоятельно рекомендую этого не делать по следующим причинам:

Другим вариантом будет использование поиска и замены. У PHP есть хорошие встроенные средства для этого. Мы можем создать документ Word, в котором разместим метки со специальными разделителями, которые в последствии будут заменены. Например, мы можем создать документ, который будет содержать следующий фрагмент:

а с помощью PHP мы легко можем заменить его на содержимое поля “Имя”, полученное с формы.

Это просто, и избавляет нас ото всех неприятных последствий, с которыми мы сталкиваемся в первом способе. Нам всего лишь нужно определиться с правильным разделителем, и в этом случае мы, получается, используем шаблон.

Я рекомендую третий способ, и он основывается на более глубоком знании Word. В качестве заполнителей мы будем использовать поля, а с помощью PHP кода будем непосредственно обновлять значения в полях соответствующими значениями.

Этот подход гибкий, быстрый, и согласуется с лучшими практиками работы с Word. С его помощью также можно избежать полнотекстового поиска в документе, что хорошо сказывается на производительности. Замечу, что у этого решения также есть недостатки.

После замены полей новыми значениями мы отпечатаем документ с помощью

Метод PrintOut принимает несколько необязательных параметров, и мы используем самую простую его форму. Так будет отпечатана одна копия документа на принтере по умолчанию, который присоединен к Windows-машине.

После того, как мы закончили с кодом, можем загрузить нашу страницу с формой, забить некоторые значения, и отправить её. Нижеприведенные изображения показывают результат работы скрипта, а также обновленный документ Word:

Улучшение скорости обработки и немного подробнее о PIA

Это сильно замедлит скорость разработки. Чтобы ускорить разработку, я бы рекомендовал писать функции сначала на C#, а после переводить код в PHP. Я могу рекомендовать бесплатную IDE для разработки на C# под названием “#develop”. Найти ее можно здесь. Я предпочитаю ее Visual Studio, так как #develop меньше, проще и быстрее.

Миграция C# кода в PHP не так страшна, как кажется. Давайте я покажу вам пару строк на C#:

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

Заключение

В этой статье мы показали, как заполнить данными документ Word с помощью библиотек PHP COM и возможностями взаимодействия Microsoft Office.

Windows и Office широко используются в повседневной жизни. Знать силу Office/Window и PHP будет полезно каждому PHP и Windows разработчику.

С помощью расширения PHP COM вам открывается дверь к использованию этой комбинации.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://www.sitepoint.com/make-microsoft-word-documents-php/
Перевел: Станислав Протасевич
Урок создан: 5 Сентября 2014
Просмотров: 29933
Правила перепечатки

Читайте также:  пожелания со святой пасхой

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Источник

Работа с phpWord. Заполнение шаблона договора docx (генерация word из php)

Работа с phpWord. Заполнение шаблона договора docx (генерация word из php)
Начну с постановки задачи. А она довольно простая — работая над сайтом клиента по прокату автомобилей возникла необходимость несколько автоматизировать рутинные операции. В частности требовалось при оформлении аренды на сайте автоматически заполнять в договоре некоторые поля. Вот этим и займемся.

Для работы нам потребуется замечательная библиотека phpWord. Она имеет огромное количество возможностей, мы же рассмотрим ее способность заполнять готовые шаблоны документов.

Итак, мы скачали phpWord, распаковали архив и залили на веб-сервер. В моем случае речь идет о версии 0.6.2 Beta.

Теперь нам необходимо подготовить сам шаблон. Для этого запускаем MS Word или даже Wordpad и набираем текст договора. Для примера я набросал тестовый договор, который выглядит вот так (кликабельно):

Давайте определимся, что в этом шаблоне мы поручим заполнять php скрипту. К примеру, пусть это будет номер договора с датой, а также ФИО продавца и номер паспорта. Теперь давайте превратим наш договор в шаблон, с которым будем работать дальше.

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

Данные Переменная
Номер договора d_num
Дата договора d_date
Фамилия last_name
Имя name
Отчество surname
Замечательно. Теперь делаем следующее — на тех местах, где у нас данные, мы их удаляем и вставляем имена переменных в виде

Отнеситесь к этому внимательно — ошибок допускать нельзя. Сохраняем полученный шаблон под именем Template.docx (можно назвать по своему).

Внимание! При сохранении документа в Word 2010 поставьте чекбокс «Поддерживать совместимость с предыдущими версиями Word» иначе работать не будет.

Вот теперь наш шаблон готов, теперь давайте научим php заполнять его.

Создаем php файл (к примеру, index.php) со следующим содержимым:

Как видно, скрипт успешно заполнил шаблон, вот только с русскими символами беда — они выглядят не так, как задумывалось. Как решить эту проблему читайте в статье.

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

Источник

Образовательный портал