Как создать pdf файл в python
PDF один из самых популярных форматов документов. С ростом вычислительных способностей мобильных устройств, данный формат становиться все популярнее. Для создания документов существуют различные готовые решения, но бывают ситуации когда необходимо автоматизировать создание PDF. Рассмотрим как это можно сделать средствами языка python.
Существуют различные способы создания pdf файлов в python. Одним из лучшим можно назвать библиотеку pdfkit. Она позволяет переводить HTML-документы в формат PDF. Установить ее можно при помощи pip:
pip install pdfkit
В основе pdfkit лежит библиотека wkhtmltopdf. Поэтому для генерации документов с изображениями и прочими наворотами гипертекстовой разметки нужно также установить ее.
Pdfkit поддерживает три способа создания PDF из HTML:
1. По ссылке.
import pdfkit pdfkit.from_url('https://it-hub.com.ua', 'data.pdf')
2. Из файла
import pdfkit pdfkit.from_file('index.html', 'data.pdf')
3. Из текстовой строки
import pdfkit pdfkit.from_string('Cucumbler.ru', 'data.pdf')
Продвинутовое использование pdfkit.
Мы может передавать параметры генерации страницы. Вот пример как указать размер A3 с отсупами по 0,5 дюйма с каждой стороны:
import pdfkit options_dict = { 'page-size': 'A3', 'margin-top': '0.5in', 'margin-bottom': '0.5in', 'margin-right': '0.5in', 'margin-left': '0.5in', } pdfkit.from_url('https://it-hub.com.ua', 'data.pdf', options=options_dict)
Для просмотра всех возможных параметров рекомендую ознакомиться с документацией библиотеки wkhtmltopdf на ее официальном сайте или при помощи вызова
wkhtmltopdf -h
В некоторых случаях может появляться ошибка wkhtmltopdf: cannot connect to X server. Это происходит потому, что по-умолчанию wkhtmltopdf собран с зависимостями xserver. Чтоб решить проблему нужно установить его из следующего источника:
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2 tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2 sudo mv wkhtmltopdf-amd64 /usr/local/bin/wkhtmltopdf sudo chmod +x /usr/local/bin/wkhtmltopdf