WeaseyPrint неправильно форматирует PDF - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь создать PDF-файл из HTML-файла, в который я также хочу передать переменные для шаблона JINJA, чтобы его забрать.В настоящее время я пытаюсь использовать weasyprint для этого с:

from weasyprint import HTML, CSS

css = CSS(string='@page { size: A3; margin: 0cm }')
html = HTML('/home/templates/pdf_test.html')

html.write_pdf('test.pdf', stylesheets=[css])

Как бы я затем реорганизовал это для отправки переменных в HTML-код перед созданием PDF-файла?Я использую флягу для моей платформы, и HTML содержит шаблоны JINJA.

1 Ответ

0 голосов
/ 14 мая 2019

Это решение может быть немного запутанным, но оно работает, поэтому я добавлю его сюда для всех, кто читает это ...


from weasyprint import HTML

@leads.route("/create-quote/<int:lead_id>", methods=['GET', 'POST'])
def generate_pdf(lead_id):
    post = Quote.query.get_or_404(lead_id)
    html_template = render_template('leads/pdf_test.html', post=post)
    HTML(string=html_template).\
        write_pdf('DESTINATION_OF_FILE/{}_quote.pdf'.format(post.business_name),
                  stylesheets=['PATH_TO_CSS_FOR_PDF'])
    flash('Your quote email has been generate! Please see var/b2b/quotes', 'success')
    return redirect(url_for('main.dashboard'))

Итак, мы запрашиваем в таблице данные, которые мы хотим заполнить в pdf - post = Quote.query.get_or_404(lead_id)

Затем мы визуализируем проходящий HTML-код в качестве аргумента, поскольку мой jinja равен {{ post.[variable] }}

Используя WeaseyPrint, мы можем создать объект HTML, передавая заполненный HTML и CSS для PDF.

Возможно, есть лучший способ сделать это, пожалуйста, не стесняйтесь размещать лучшее решение, но это динамически создает PDF на основе HTML-шаблона.

...