【问题标题】:django - Generate multiple PDF files in a loop condition using reportlabdjango - 使用reportlab在循环条件下生成多个PDF文件
【发布时间】:2018-09-16 16:27:52
【问题描述】:

我在一个 django 项目中,并尝试使用 reportlab 在循环条件下生成多个 PDF 文件。

view.py

def pdftest(request, *args, **kwargs):
    if request.method == 'POST':
        for x in range(0, 3):
            response = HttpResponse(content_type='application/pdf')
            buffer = BytesIO()
            doc = SimpleDocTemplate(buffer, pagesize=portrait(letter))
            elements = []
            ptext = 'Hellow World! --- %s' %x
            styles=getSampleStyleSheet()
            elements.append(Paragraph(ptext, styles['Normal']))
            doc.build(elements)
            response['Content-Disposition'] = 'attachment; filename="{}"'.format('test.pdf')
            pdf = buffer.getvalue()
            buffer.close()
            response.write(pdf)
            return response
    context = {}
    context['title'] = 'PDF TEST'
    return render(request, 'companies/pdftest.html', context)

但我的程序只生成一个 PDF。你对这个问题有什么想法吗?

【问题讨论】:

  • 您将在第一次循环中返回响应 (return response)。你预计return 之后会发生什么?

标签: django pdf reportlab


【解决方案1】:

您在循环的第一遍调用return response,因此显然您的程序永远不会到达第二遍或第三遍。

【讨论】:

  • 我知道这是问题所在。但是当我在循环之外调用“返回响应”时,它仍然只生成了一个 PDF。
  • 想一想:如果你在循环之后调用return response,你只会返回最后一个response。每次循环时,您都会将新的 PDF 重新分配给 response 并丢失前一个。如果您想稍后访问 PDF,您应该将它保存到磁盘的某个位置。你想做什么?在一个响应中返回 3 个文件?然后将文件添加到在循环之外创建的response 对象。哪个客户端将使用响应,浏览器无法一次下载 3 个文件。这是不可能的。
  • 我想你指出了我在哪里徘徊。正如您所提到的,将 pdf 文件保存到磁盘的某个位置并稍后访问它们应该会更好。我会尝试这种方式。如果您能介绍任何好的参考资料,将会很有帮助。
  • 查看 FileStorage 和 File 上的 Django 文档,了解如何处理文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2017-11-29
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
相关资源
最近更新 更多