如何从django获取渲染后的模板?-pdfkit

How to get the rendered template from django?-pdfkit

我的 Django 应用程序中有一个模板,我需要将其呈现在变量中或将其保存在 html 文件中。

我的目标是将模板的 html 渲染转换为 pdf,我正在使用 pdfkit,因为它是我见过的最好的 html 到 pdf 转换器,reportlab 不做我的工作想要。

当我尝试做这样的事情时:

pdf = pdfkit.from_file ('app / templates / app / table.html', 'table.pdf')

我得到了 pdf,但打印出来的是这样的:

enter image description here

感谢任何帮助!

from django.template.loader import get_template, render_to_string

使用上面的方法导入 return 模板的函数。 get_template return 是模板对象,而 render_to_string return 是渲染模板的字符串。这是我使用 weasyprint 而不是 pdfkit 的方法。

def weasy_pdf_generation(request, id):
    # my data
    _, _, draft_details = get_draft_details('setup', request, id)
    radios_dict = {k:v[1] for k,v in draft_details.items()}
    # rendering to string
    html_template = render_to_string('tax/setupreview report.html', radios_dict)
    styles = CSS(url="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css")
    pdf_file = HTML(string=html_template).write_pdf(stylesheets=[styles])

    #response details
    response = HttpResponse(pdf_file, content_type='application/pdf')
    response['Content-Disposition'] = 'filename="home_page.pdf"'
return response

这是我使用 django 2.0.1 和 pdfkit 0.6.1 的情况的解决方案:

获取模板:

template = get_template ('plapp / person_list.html')

用数据渲染它:

html = template.render ({'persons': persons})

继续views.py中方法的定义,直接在浏览器下载pdf的那个:

def pdf(request):
    persons = Person.objects.all()
    template = get_template('plapp/person_list.html')
    html = template.render({'persons': persons})
    options = {
        'page-size': 'Letter',
        'encoding': "UTF-8",
    }
    pdf = pdfkit.from_string(html, False, options)
    response = HttpResponse(pdf, content_type='application/pdf')
    response['Content-Disposition'] = 'attachment;
    filename="pperson_list_pdf.pdf"'
    return response