Django и weasyprint, объединить pdf

Можно ли объединить несколько PDF-файлов в django с помощью weasyprint?

У меня есть что-то вроде этого:

def verpdf(request, pk):
    odet = get_object_or_404(Note, pk = pk)
    template = get_template('pdfnot.html')
    template1 = get_template('pdfnot2.html')
    p1 = template.render({'odet': odet}).encode(encoding="ISO-8859-1")
    p2 = template1.render({'note':odet}).encode(encoding="ISO-8859-1")
    pdf1 = HTML(string=p1).render()
    pdf2 = HTML(string=p2).render()
    all_pages = [po for po in pdf1.pages for doc in pdf2.pages]
    pdf_file = pdf1.copy(all_pages).write_pdf()
    http_response = HttpResponse(pdf_file, content_type='application/pdf')
    http_response['Content-Disposition'] = 'filename="report.pdf"'

    return http_response

Но я не могу объединить два файла, всегда выводит только первый шаблон, можно ли объединить два документа в один pdf? Вы можете помочь мне? Спасибо.


person Kevin Ramirez Zavalza    schedule 17.08.2016    source источник


Ответы (2)


Мне потребовалось некоторое время, но я решил это, моя вина в том, что я не понял документацию, лол, вот код, если у кого-то есть такая же проблема:

def verpdf(request, pk):
    odet = get_object_or_404(Note, pk = pk)
    template = get_template('pdfnot.html')
    template1 = get_template('pdfnot2.html')
    p1 = template.render({'odet': odet}).encode(encoding="ISO-8859-1")
    p2 = template1.render({'note':odet}).encode(encoding="ISO-8859-1")
    pdf1 = HTML(string=p1)
    pdf2 = HTML(string=p2)
    pdf11 = pdf1.render()
    pdf12 = pdf2.render()

    val = []

    for doc in pdf11, pdf12:
        for p in doc.pages:
            val.append(p)

    pdf_file = pdf11.copy(val).write_pdf() # use metadata of pdf11

    http_response = HttpResponse(pdf_file, content_type='application/pdf')
    http_response['Content-Disposition'] = 'filename="report.pdf"'

    return http_response

И при этом выход в формате pdf с двумя страницами.

person Kevin Ramirez Zavalza    schedule 17.08.2016
comment
более подробная информация здесь: документация weasyprint: советы и рекомендации - person Igor Voltaic; 14.04.2020

  • Короткое и простое решение заключается в том, что
  • Добавьте этот <p style="page-break-before: always"></p> после тега body в html-файл
  • Это работает для меня
person Ashish Sondagar    schedule 23.05.2020