1. 程式人生 > >django 生成動態的PDF檔案

django 生成動態的PDF檔案

WeasyPrint,它是一個Python庫可以生成PDF檔案從HTML模板中。

安裝WeasyPrint

pip install WeasyPrint

建立一個PDF模板(template)
我們需要一個HTML文件給WeasyPrint輸入。我們將要建立一個HTML
模板(template),渲染它使用Django,並且傳遞它給WeasyPrint來生成

PDF檔案。

建立一個新的模板(template)檔案在myapp應用的

templates目錄下命名為pdf.html

<html>

    新增你要生成的頁面

</html>

這個模板(template)就是PDF檔案

渲染PDF檔案
我們將要建立一個檢視(view)來生成PDF檔案。編輯myapp應用的views.py檔案新增如下程式碼:

from django.conf import settings
from django.http import HttpResponse
from django.template.loader import render_to_string
import weasyprint
@staff_member_required
def admin_order_pdf(request, order_id):
    queryset = get_object_or_404(mymodel, id=mymodel_id)
    html = render_to_string('pdf.html',
    {'queryset': queryset})
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'filename=\"mymodel_{}.pdf"'.format(mymodel.id)

    weasyprint.HTML(string=html).write_pdf(response,

        stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + 'css/pdf.css'

    )])

    return response

接下來配置一個路由去訪問就行了

效果: