【发布时间】:2021-10-19 07:39:41
【问题描述】:
我可以在 Django 应用程序中使用 reportlab 创建 PDF 文件。但是,我无法将它添加到模型中的 FileField 中。我想知道如何将 io.BytesIO 数据传输到 Django 中的 FileField。
这是我的views.py的总结。
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.pdfbase import pdfmetrics
buffer = io.BytesIO()
cc = canvas.Canvas(buffer, pagesize=A4)
# describe something
font_name = "HeiseiKakuGo-W5"
cc.registerFont(UnicodeCIDFont(font_name))
cc.setFont(font_name, 7)
cc.drawString(65*mm, 11*mm, 'test')
cc.showPage()
cc.save()
buffer.seek(0)
exampleObject= get_object_or_404(SomeModel, pk=self.kwargs['pk'])
exampleObject.exampleFileField.save('test.pdf', File(buffer)) # here! this sentence doesn't work.
exampleObject.save()
return FileResponse(buffer, as_attachment=True, filename='test.pdf')
关键是下面的句子不起作用。我认为“文件(缓冲区)”不合适。
exampleObject.exampleFileField.save('test.pdf', File(buffer))
虽然有一次我尝试在目录中创建 pdf 文件作为临时文件后将 pdf 保存到 FileField 中,但我更喜欢使用 io.BytesIO。
【问题讨论】:
标签: python django pdf reportlab bytesio