gpt4 book ai didi

django - 将 pdf 从 django-wkhtmltopdf 保存到服务器(而不是作为响应返回)

转载 作者:行者123 更新时间:2023-12-02 01:42:45 24 4
gpt4 key购买 nike

我正在编写一个 Django 函数,它接受一些用户输入,并为用户生成 pdf。但是,生成 pdf 的过程非常密集,我会收到很多重复的请求,因此我想将生成的 pdf 存储在服务器上,并在生成之前检查它们是否已经存在。

问题是 django-wkhtmltopdf (我用于生成)意味着直接返回给用户,并且我不确定如何将其存储在文件中。

我有以下内容,可用于在/pdf 返回 pdf:

url.py

urlpatterns = [
url(r'^pdf$', views.createPDF.as_view(template_name='site/pdftemplate.html', filename='my_pdf.pdf'))
]

View .py

class createPDF(PDFTemplateView):
filename = 'my_pdf.pdf'
template_name = 'site/pdftemplate.html'

这样就可以很好地创建 pdf 了。我想要的是从另一个 View 调用该 View 并保存结果。这是我到目前为止所得到的:

#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)

这将创建 temp.pdf,大小与我预期的大小相当,但该文件无效(它呈现为一个完全空白的页面)。

有什么建议吗?

最佳答案

详细说明之前给出的答案:生成 pdf 文件并保存到磁盘,请在 View 中的任何位置执行此操作:

            ...
context = {...} # build your context

# generate response
response = PDFTemplateResponse(
request=self.request,
template=self.template_name,
filename='file.pdf',
context=context,
cmd_options={'load-error-handling': 'ignore'})

# write the rendered content to a file
with open("file.pdf", "wb") as f:
f.write(response.rendered_content)
...

我在 TemplateView 类中使用了此代码,因此 requesttemplate 字段是这样设置的,您可能必须将其设置为适合您的特定情况的任何内容。

关于django - 将 pdf 从 django-wkhtmltopdf 保存到服务器(而不是作为响应返回),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32516342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com