Django/Python: сгенерируйте pdf с правильным языком
Я использую Pisa/xhtml2pdf в своих приложениях Django для создания pdf файла из источника HTML. То есть:
- Я генерирую HTML файл, отформатированный во всех "печатных" материалах (например, разрывы страниц, заголовок, нижний колонтитул и т.д.).
- Я конвертирую этот HTML в pdf, используя Pisa
Этот процесс в порядке, но он медленный (особенно при работе с длинными таблицами), и я должен использовать HTML/CSS в соответствии с функциями/ограничениями Пизы.
Возникает вопрос: правильно ли вы создаете pdf файл из веб-приложения (т.е. создаете HTML-код, а затем преобразовываете его в pdf) или существует более прямой способ: "написать" pdf с более подходящим языком
Ответы
Ответ 1
Писатель WeasyPrint здесь. Точка использования HTML/CSS для создания PDF (в отличие от использования низкоуровневой библиотеки PDF напрямую) заключается в том, чтобы получить автоматический макет. Он позволяет указать ограничения высокого уровня, такие как h1 { page-break-after: avoid }
, и позволить механизму компоновки определить его, а не указывать абсолютную позицию всего. Первое, когда вы вносите изменения в свои документы, гораздо удобнее обслуживать.
Некоторые инструменты, такие как rst2pdf, имеют свой собственный синтаксис таблиц стилей, но это просто плохой способ повторного создания CSS.
Но да, демпинг сложных таблиц стилей, сделанных для экрана, может не дать больших результатов. Лучше строить таблицы стилей с учетом печати или даже использовать совершенно разные таблицы стилей с @media print
в CSS или <link media="print">
в HTML.
Ответ 2
Я думаю, что создать pdf файл из html с такими библиотеками, как pisa или http://weasyprint.org/ - это самый простой подход. он отлично работает для меня, потому что он заботится о вставке изображений, css, штрих-код (на пизу)... и т.д.
Как и раньше, если вы хотите написать pdf файл, взгляните на Reportlab, но для реализации потребуется намного больше времени. В обоих случаях я предлагаю всегда генерировать PDF в фоновом режиме с помощью сельдерея или python-rq для оптимизации.
Ответ 3
Известно, что Пиза имеет различные проблемы - особенно с длинными столами. В общем, следует избегать использования PISA. Другие варианты:
- напрямую используя Reportlab.
- z3c.rml(клон языка шаблонов Reportlab)
- коммерческие альтернативы:
Общее правило, когда дело доходит до производства PDF: вы получаете то, за что платите.
Преобразователи, такие как Pisa или Apache FOP, представляют собой полувыпеченные решения, которые работают для простых случаев, но сосут вообще.
Ответ 4
Вы также можете использовать механизм рендеринга веб-китов QT для создания PDF файлов из HTML с http://code.google.com/p/wkhtmltopdf/ и django-wkhtmltopdf.
Преимущество состоит в том, что вы можете писать HTML и CSS, как обычно для WebKit. Это хорошо работает, если вы выводите существующую веб-страницу, но может быть менее целесообразным, если вы создаете PDF файлы с нуля.