Создание Печатной Формы Microsoft Word С Использованием Php



Фон Пишу CRM-модуль в одном дилерском центре.

Весь проект реализован в сети.

Одной из последних задач было создание печатной формы, а точнее коммерческого предложения.

И всё бы ничего, но документ надо распечатать и отдать клиенту, а главная загвоздка была в том, что этот документ был многостраничным и содержал два колонтитула, шапку и боковую часть.

(Это оказалась официальная форма организации).

Решение — под катом.



Мое решение
И вот с этими колонтитулами и возникла проблема.

Я не смог найти простое решение, используя HTML-Javascript. С помощью HTML можно управлять размещением блоков при печати, перемещать блок, если он не помещается полностью, и все в таком духе.

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

Поэтому было решено пойти немного другим путём, а именно обратиться в Microsoft Word. Слава руководству этой организации, Microsoft Office 2007 установлен на каждой рабочей станции.

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

Оставалось только вставить в нужные места данные клиента, таблицу со спецификацией товара и контакты менеджера.

Как это сделать? Я не использовал сторонние библиотеки; оказалось, что документ Microsoft Word (речь идет о *.

docx) представляет собой не что иное, как обычный zip с кучей xml-файлов и других ресурсов типа картинок.

Распаковав docx, получим следующее:

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

Собственно из всех этих файлов нам нужен только один, это document.xml. В нем содержится вся интересующая нас информация, а именно содержание нашего документа.

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

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

Для этого мы используем Zip — расширение позволяет легко читать и записывать как в сами сжатые ZIP-архивы, так и в файлы внутри них.

   

$zip = new ZipArchive; if ($zip->open('template.docx') === TRUE) {

Теги: #microsoft word #microsoft office #php #печать документов печать #php #программирование
Вместе с данным постом часто просматривают: