The*_*lar 5 pdf django wkhtmltopdf
我正在编写一个 Django 函数,它接受一些用户输入,并为用户生成一个 pdf。但是,生成 pdf 的过程非常密集,我会收到很多重复的请求,所以我想将生成的 pdf 存储在服务器上并在生成它们之前检查它们是否已经存在。
问题是 django-wkhtmltopdf(我用于生成)旨在直接返回给用户,我不确定如何将其存储在文件中。
我有以下内容,可用于在 /pdf 处返回 pdf:
网址.py
urlpatterns = [
url(r'^pdf$', views.createPDF.as_view(template_name='site/pdftemplate.html', filename='my_pdf.pdf'))
]
Run Code Online (Sandbox Code Playgroud)
视图.py
class createPDF(PDFTemplateView):
filename = 'my_pdf.pdf'
template_name = 'site/pdftemplate.html'
Run Code Online (Sandbox Code Playgroud)
所以这可以很好地创建一个pdf。我想要的是从另一个视图调用该视图并保存结果。这是我到目前为止所得到的:
#Create pdf
pdf = createPDF.as_view(template_name='site/pdftemplate.html', filename='my_pdf.pdf')
pdf = pdf(request).render()
pdfPath = os.path.join(settings.TEMP_DIR,'temp.pdf')
with open(pdfPath, 'w') as f:
f.write(pdf.content)
Run Code Online (Sandbox Code Playgroud)
这将创建 temp.pdf 并且大约是我期望的大小,但文件无效(它呈现为一个完全空白的页面)。
有什么建议?
好吧,你需要看一下wkhtmltopdf的代码,首先你需要使用wkhtmltopdf.views中的PDFTemplateResponse类来访问rendered_content属性,这个属性让我们可以访问pdf文件:
response = PDFTemplateResponse(
request=<your_view_request>,
template=<your_template_to_render>,
filename=<pdf_filename.pdf>,
context=<a_dcitionary_to_render>,
cmd_options={'load-error-handling': 'ignore'})
Run Code Online (Sandbox Code Playgroud)
现在您可以使用render_content属性来访问 pdf 文件:
mail.attach('pdf_filename.pdf', response.rendered_content, 'application/pdf')
Run Code Online (Sandbox Code Playgroud)
就我而言,我使用此 pdf 附加到电子邮件,您可以存储它。
| 归档时间: |
|
| 查看次数: |
2461 次 |
| 最近记录: |