Да, Pisa отличная штука, мы ей печатаем вот такие инвойсы, совмещенные с трекингом и таможенными формами CN22 на одном листе самоклейки. Сделали за 3 часа примерно. Просто конвертируется HTML-ка, картинки и шрифты все подключаются автоматом. Никаких особых подводных камней не было замечено.
Дело в том, что при отладке шаблона я пишу html, тут же _одинаково_ вижу его в FireFox и любом webkit-браузере (да, можно достичь и такого) — при этом в конечный PDF рендерится так, как видно при отладке. Даже print preview из FireFox дает практически конечный результат.
А PISA рендерит совершенно по-своему. Сиречь — отладка шаблона замедляется в разы.
Ну и насчет page-break я не сильно уверен — кажется, не ловит. Могу и ошибаться.
Возможно, какие-то особо сложные конструкции она рендерит по-своему. Я задавал размер странице и дальше все размеры, включая шрифты, в мм, ширины ячеек таблицы в процентах. Сделал подобие reset.css, чтобы задать умолчания. Дальше были проблемы только с размером картинок, их пришлось подогнать вручную. Если у вас получился идеальный рендеринг, то это отлично.
При этом заметим, что даже если форма «мягкая» — не дай бог она не понравится в налоговой (т.е. не будет максимально похожа на Консультантовскую). Просто завернут без комментариев (проверенно нашей юристкой).
Я бы посоветовал, использовать например pdfcrowd.com/.
Это сервис использует Prince ( www.princexml.com/ ), стоимость которого начинается от $3800. Прекрасен он тем, что умеет рендерить практически любой html, таким образом сверстать на twitter-bootstrap страничку пару пустяков, а получить еще и pdf еще проще. Заметьте, все это при минимальном количестве кода — значит не упадет.
Опять же — из тестового примера получилась немного ерунда (еще и с рекламой, которую в налоговой могут и не принять.
Но отработал очень корректно.
Спасибо за идею — запишу в TODO.
Два дня назад решал похожую проблему. Остановился на mPDF, он умеет конвертировать html в pdf, при этом написан полностью на php. Для предпросмотра может не подойти, так как его понимание html отличается от понимания браузеров, но добиться хорошего результата для мягких форм вполне можно.
Этот случай рассмотрен. Интерфейс есть, он и применяется — вызов бинарника. Что не совсем нативно.
Python-binding к библиотеке libwkhtmltox пока падает.
Я использую с своем проекте trml2pdf от reportlab. Со временем разобрался в особенностях rml и дело пошло как по маслу.
Для рендера использую django шаблонизатор, и функцию подсмотренную где то на сайте RL.
Вызывается на подобие django.shortcuts.render типа так, это дает возможность использовать всю мощь шаблонов джанго и языка rml.
Перечислять очень долго.
Из 158 entities, перечисленные в RML user guide, trml2pdf поддерживает примерно 60.
В сырцах они все видны (def render(...):), можете сравнить самостоятельно.
Похоже — в QWebView 4.8 (или webkit 2.2 вообще?) поломалось page-break-*. ПО крайней мере — webkit-браузеры (кроме Chromium, что поняно) печатают без единого разрыва.
Ждем пачей — тогда проблема с html будет решена окончательно.
Ну почему же… Вы можете наблюдать реальное приложение с таки достаточно красивыми PDF (налоговой и ФМС нравится, по крайней мере).
Другой вопрос что сейчас это решается чуть-чуть некрасиво — через вызов внешних программ.
До нативного python осталось совсем немного:
* допилить webkit
* и допилить poppler
Красивая печать в PDF из Django