Django和WeasyPrint,合并PDF

9

在Django中使用Weasyprint可以合并多个PDF文件吗?

我有如下需求:

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文件?你能帮忙吗?谢谢。

2个回答

14

我花了一点时间,但是我解决了这个问题,是因为我没有理解文档,哈哈,如果有人遇到同样的问题,这是代码:

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输出文件。


更多细节请参见:WeasyPrint文档:技巧和诀窍 - Igor Voltaic

1

<p style="page-break-before: always"></p> 在 body 标签后面也是一个选项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接