БетаЛаборатория - внеочередной IT-блог

Записки обычного программиста

 

Записи с тэгом pisa

Pisa XHTML2PDF и поддержка HTTP AUTH

В рамках Торговой Системы понадобилось мне сделать генератор этикеток и ценников. Мой старый, генерировавший jpg картинки по строгому шаблону не годится, потому что информация на разхных ценниках разная, сответсвтенно и размеры у них должны быть динамические. Наиболее быстрым и удобным решением, мне показалось генерировать pdf. В процессе размышлений и поиска, была найдена библиотека Pisa, конвертирующая html в pdf. Вот это совсем то что нужно. Само собой есть определенные ограничения в верстки, но главное она понимает большую часть html+css.
 
Все было неплохо, пока не наткнулся на 2 момента. Момент первый - если картинка вставляется в ячейку таблицы, у которой задан конкретный размер, то картинка эта отображается только в том случае, если у нее заданы аттрибуты width и height. То есть встраивать картинки с неопределенным размером в таблицу не получается. Поиски по комьюнити ничего не дали, поэтому полез в исходники. В итоге обнаружилось следующее - в методе определяющем парметры картинки, в случае отсутствия жестко прописаных размеров, основным источником размеров почему-то считался родительский объект. То есть, если у картинки не заданы размеры, то Pisa пытеатся взять эти размеры у контейнера в котором этак картинка лежит. Если размеры родительского контейнера не прописаны в стилях, то все проходит более-менее нормально - Pisa, не получив от родительского объяекта объявления стиля вычисляет размеры картинки исходя из самой кратинки. А вот, если у родительского контйнера в стиля присутствует width или height, то тогда размеры картинки вычисляются именно их этих параметров. Причем делается это без конвертации значений, из-за чего, собсвтенно и существует проблема. Поскольку, в стилях размеры пишутся с указанием единиц измерения (в моем случае ячейка имела ширину 7cm), заначение это строковое. И естественно, умножение его на 96 dpi (именно так происходит "вычисление" размера картинки), естественно дает на выходе 0. Патчить это я не стал - решил ограничиться вычислением размеров картинки при генерации html шаблона, и указанием их в аттрибутах тега <img> - ИМХО, это наиболее верное решение.
 
А вот вторую проблему без патча решить не удалось. Связана она опять-таки с картинками. Pisa поддерживает два варианта обращения к картинкам - либо по абсолютному пути на сервере (для локальных файлов, естественно), либо по http или https. Однако при этом не была учтена особенность, что урл может быть защищен http-авторизацией. У меня все dev-площадки всегда закрыты от внешнего доступа. Да и некоторые рабочие системы тоже. Поэтому, снова пришлось лезть в исходники, но на этот раз патчить все-таки пришлось. Патч обеспечивает обработку URL вида protocol://userid:passwd@host/path/to/file. То есть перед тем как запросить с сервера host файл /path/to/file система посылает Basic Auth заголовок с логином и паролем для доступа.
 
Патч сделан для версии XHTML2PDF / pisa 3.0.32
 
PS: Пока копался в коде пизы, понял что в ближайшем будущем буду от нее отказываться - не устраивает архитектра и перегруженость. Слишком много не нужного в рамках проекта ТС функционала.

Авторизация

Логин:

Пароль:


Регистрация | Забыли пароль?


Последние записи


Promo

Follow pyhoster on Twitter Subscribe

Реклама

A Django project.