Преобразование html в pdf с помощью Python/Flask
Я хочу создать pdf-файл из html с помощью Python + Flask. Для этого я использую xhtml2pdf. Вот мой код:
def main():
pdf = StringIO()
pdf = create_pdf(render_template('cvTemplate.html', user=user))
pdf_out = pdf.getvalue()
response = make_response(pdf_out)
return response
def create_pdf(pdf_data):
pdf = StringIO()
pisa.CreatePDF(StringIO(pdf_data.encode('utf-8')), pdf)
return pdf
в этом коде файл генерируется на лету. Но! xhtml2pdf не поддерживает много стилей в CSS, из-за этой большой проблемы, чтобы правильно пометить страницу. Я нашел другой инструмент (wkhtmltopdf). Но когда я написал что-то типа:
pdf = StringIO()
data = render_template('cvTemplate1.html', user=user)
WKhtmlToPdf(data.encode('utf-8'), pdf)
return pdf
была поднята ошибка:
AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'
и мой вопрос в том, как конвертировать html в pdf с помощью wkhtmltopdf (с генерацией файла на лету) в колбе?
заранее спасибо за ваши ответы.
3 ответов
страница нуждается в рендеринге, вы можете использовать pdfkit:
https://pypi.python.org/pypi/pdfkit
https://github.com/JazzCore/python-pdfkit
пример в документе.
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf') # Is your requirement?
вы пробовали с Фляга-WeasyPrint, который использует WeasyPrint? На их веб-сайтах есть хорошие примеры, поэтому я не копирую их здесь.
преобразование в 3 шага с веб-страницы / HTML в PDF
Шаг 1: скачать библиотеку pdfkit
$ pip install pdfkit
Шаг 2: скачать wkhtmltopdf
Для Ubuntu / Debian:
sudo apt-get install wkhtmltopdf
Для Windows:
(a)ссылка для скачивания:WKHTMLTOPDF
(b)Set: переменная PATH устанавливает двоичную папку в переменных среды.
Шаг 3: Код в Python для загрузки:
(i) уже сохраненная HTML-страница
import pdfkit
pdfkit.from_file('test.html', 'out.pdf')
(ii) конвертировать по URL сайта
import pdfkit
pdfkit.from_url('https://www.google.co.in/','shaurya.pdf')
(iii) сохранить текст в формате PDF
import pdfkit
pdfkit.from_string('Shaurya Stackoverflow','SOF.pdf')