Фон Пишу CRM-модуль в одном дилерском центре.
Весь проект реализован в сети.
Одной из последних задач было создание печатной формы, а точнее коммерческого предложения.
И всё бы ничего, но документ надо распечатать и отдать клиенту, а главная загвоздка была в том, что этот документ был многостраничным и содержал два колонтитула, шапку и боковую часть.
(Это оказалась официальная форма организации).
Решение — под катом.
Мое решение
И вот с этими колонтитулами и возникла проблема.Я не смог найти простое решение, используя HTML-Javascript. С помощью HTML можно управлять размещением блоков при печати, перемещать блок, если он не помещается полностью, и все в таком духе.
Я также слабо представляю, как посчитать примерный конец страницы и поместить туда блок с футером (с помощью javascript), так как нюансов на стороне пользователя довольно много.
Поэтому было решено пойти немного другим путём, а именно обратиться в Microsoft Word. Слава руководству этой организации, Microsoft Office 2007 установлен на каждой рабочей станции.
Итак, был собран шаблон в Word, который содержал полностью заполненное коммерческое предложение, с автоматически сформированными полями и колонтитулами.
Оставалось только вставить в нужные места данные клиента, таблицу со спецификацией товара и контакты менеджера.
Как это сделать? Я не использовал сторонние библиотеки; оказалось, что документ Microsoft Word (речь идет о *.
docx) представляет собой не что иное, как обычный zip с кучей xml-файлов и других ресурсов типа картинок.
Распаковав docx, получим следующее:
Собственно из всех этих файлов нам нужен только один, это document.xml. В нем содержится вся интересующая нас информация, а именно содержание нашего документа.
Поскольку этот файл будет служить шаблоном, мы аккуратно извлекаем его и помещаем рядом с нашим упакованным документом.
Дальше нам останется только взять его содержимое, изменить данные, упаковать в Word в нужное место и отправить пользователю в браузере.
Для этого мы используем Zip — расширение позволяет легко читать и записывать как в сами сжатые ZIP-архивы, так и в файлы внутри них.
Теги: #microsoft word #microsoft office #php #печать документов печать #php #программирование$zip = new ZipArchive; if ($zip->open('template.docx') === TRUE) {
-
Xrates V1.0.1 - Программа Мониторинга
19 Oct, 24 -
Концепт «Зимнего» Мобильного Телефона
19 Oct, 24