Преобразование 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')