Генератор pdf страниц каталога для iPlatforms.kz
4 Май
Саша подкинул интересную задачу — сделать генератор pdf страницы каталога для сайта компьютерной компании. О том, что из этого вышло — читаем ниже.
Задача. Выдать страницу сайта в виде pdf страницы каталога продукции. Все данные для этой страницы хранятся только на сайте. Движок — WordPress. Хостинг — обычный share hosting.
Для любопытных, вот что из этого вышло: http://iplatforms.kz/2011/07/e400/ (нажмите на кнопку “pdf-скачать”), либо, директ линк.
Изначально думал использовать расширение для php, которое позволяет работать с pdf документами, но у заказчика сайт крутится на обычном хостинге, поэтому вохможности поставить свой модуль для php нет. Пришлось изобретать велосипед.
Погуглили и нашли интересное решение — FPDF. Небольшой класс, позволяющий на элементарном уровне работать с pdf документами и генерировать их на лету. Возможностей класса хватает для того, что бы сделать простую выдачу. Умеет вставлять картинки, печатать текст в ячейках и добавлять к ним бордер. В принципе нам этого хватило.
Вторая проблема — как получить данные для генератора? Первое что приходит в голову — просто распарсить страницу, но мы же настоящие джедаи! А настоящие джедаи ищут красивое решение. И оно нашлось. Оказывается wordpress можно подключить как фреймворк, т.е. использовать всю мощь движка без выдачи шаблонов. Чем мы и воспользовались.
Для подключения wordpress достаточно в файл вставить строчку
include('../wp-blog-header.php');
и вуаля - вся мощь движка на кончиках пальцев:
$postId = (int) $_GET['id'];
$postData = get_post($postId);
echo $postData->post_title;
Проблемы с которыми столкнулись при разработке:
- Очень сложно выравнять строки таблицы по ширине. FPDF умеет работать только с ячейками, поэтому понятие строк для него не существует. Поэтому в таблице характеристик, сначало пришлось рисовать правую большую ячейку, а затем левую меньшую и к ней дорисовывать довесок в виде пустой ячейки с подходящим бордером и фоном.
- Странные проблемы возникли при выдаче pdf браузеру стандартным методом $fpdf->Output(). В случае ИЕ8 они проявлялись в том, что браузер возвращал 404 ошибку или просто отказывался грузить документ. Поэтому пришлось на лету сохранять данные в файл и редиректить браузер на этот файл.
- Красивая шапка и подвал делалась фоновой картинкой. Вся красота - это одна большая картинка поставленная в фон pdf дока.
- Внутренние единицы измерения координат в FPDF - миллиметры. Стандартный лист А4 - 210х297 мм. А у нас макеты в пикселях, поэтому пришлось вводить поправочные коэффициенты для простоты реализации верстки.
P.S. Если будете делать аналогичный проект, то лучше посмотрите в сторону TCPDF. Это более продвинутая версия и обновляется она чаще. Жалко, что я нашел ее уже после сдачи проекта.
No comments yet