Генератор 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

Leave a Reply