Предыстория
Есть некое веб-приложение(на Perl), в котором нужно было добавить определенный набор отчетов. Отчеты должны иметь два представления - HTML и PDF.Для решения этой задачи, естественно, можно было бы воспользоваться модулями типа PDF::Reuse, PDF::API2, PDF::API2::Simple, но:
1. Это лишние временные затраты (изучение API, написания дополнительного кода)
2. Это усложнение сопровождения отчетов. Необходимо дублировать логику HTML-шаблонов в PDF и постоянно поддерживать это в актуальном состоянии.
Поэтому, было выбрано другое решение - использовать конвертор HTML в PDF. Сразу оговорюсь, что было это года 3-4 назад. Для PHP, вроде как, на то время уже существовал dompdf(рендеринг написан на php), а для Perl ничего такого не было.
Провал HTMLDOC
После долгих поисков нашел такую тулзень как HTMLDOC. Но она была далеко не идеальна:1. В HTMLDOC нет поддержки Unicode, поэтому приходилось предварительно перекодировать HTML в cp1251.
2. Шрифты, которые идут с HTMLDOC не поддерживают кириллических символов. Но в интернетах был найдет комплект шрифтов с поддержкой кириллицы. Главное после установки HTMLDOC не забыть заменить шрифты :)
3. Поддержка только базового HTML(про CSS забудьте). Пришлось довольствоваться чем было.
В добавок на прошлой неделе мне пришли жалобы, что в отчетах съедаются диактрические символы(типа всякие умляуты в немецком и так далее) и я начал искать решение.
Первой попыткой было использовать HTMLDOC 1.9 (нестабильный релиз), там добавили базовую поддержку Unicode. После 8-го segfault с 10 попыток конвертации, было решено вернуться к предыдущей версии(без поддержки Unicode)
Вторая попытка была заменять не CP1251 символы на escape-последовательности вида "&#xxxx;", но после 3-4 последовательностей в файле, HTMLDOC их просто переставал преобразовывать в нужные символы.
Триумф WKHTMLTOPDF
Я начал искать новый конвертор. И каково было ж мое удивление, когда я нашел такого зверя, как WKHTMLTOPDF :)WKHTMLTOPDF - это консольный конвертор, который использует Webkit для рендеринга HTML, следовательно PDF документы будут максимально приближены к оригинальному HTML. И это реально так, можете смело использовать CSS-стили. WKHTMLTOPDF сконвертит HTML практически любой сложности!!!
Потестировав локально, я решил проинсталить его на сервер и тут меня ждал неприятный момент, при попытке конвертации он просто выдавал, что не может приконектится к X-серверу. Проблему решила статически слинкованная версия(просто 1 исполняемый файл без внешних зависимостей ), которую я просто скопировал на сервер.
WKHTMLTOPDF умеет не только конвертить локальные файлы, но может тянуть страничку с веба. Попробуйте:
wkhtmltopdf http://kanobu.ru kanobu.pdfРезультат можно посмотреть здесь.
4 коммент.:
При работе ты пользовался перловым модулем WKHTMLTOPDF (см. http://search.cpan.org/~tbr/WKHTMLTOPDF-0.02/lib/WKHTMLTOPDF.pm)?
Если да, то стоит ли его использовать?
2antonfin:
Я реализовал через обычный вызов system.
А модуль я видел, но решил его не использовать по следующим причинам:
Во-первых, он все равно сам вызывает консольный wkhtmltopdf.
Во-вторых, я не хотел лишних зависимостей, в особенности от Moose :).
В-третьих, он 2009 года, за это время были добавлены новые опции, которые модуль не поддерживает.
Только сегодня искал и разочаровался в htmldoc. Решил забросить и делать картинку, но покался Ваш пост. Спасибо!
> Только сегодня искал и разочаровался в htmldoc. Решил забросить и делать картинку, но покался Ваш пост. Спасибо!
Всегда пожалуйста! )
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)