打印到 PDF Django & ReportLab

Posted

技术标签:

【中文标题】打印到 PDF Django & ReportLab【英文标题】:Printing to PDF Django & ReportLab 【发布时间】:2020-01-28 16:47:10 【问题描述】:

我目前在 Django 中有这个视图,它可以完美地在我的 html 页面上呈现一堆记录

def patient_page(request, id):
    pat = models.patient.objects.get(pk=id) # Goes to patient models returns pk according to page
    rec = models.record.objects.all().filter(patient_assign__pk=id).order_by('-date')
    return render(request=request,
                  template_name = 'main/patient_page.html',
                  context = "pats":pat,
                             "rec":rec
                             
                  )

我也有这个打印完美的代码,我可以很容易地插入一个变量。

def write_pdf_view(textobject):

    #Need to play with filename.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'inline; filename="txt_obj.pdf"'
    buffer = BytesIO()
    my_canvas = canvas.Canvas(buffer)

    # Create textobject(s)
    textobject = my_canvas.beginText(30 * mm, 65 * mm)
    textobject.setFont('Times-Roman', 8)
    textobject.textLine(text="+ Hello This text is written 30mm in and 65mm up from the mark")

    my_canvas.drawText(textobject)

    title = "this is my title"
    my_canvas.setTitle(title)


    my_canvas.showPage()
    my_canvas.save()
    pdf = buffer.getvalue()
    buffer.close()
    response.write(pdf)
    return response

我的问题,有没有人知道我如何渲染为 pdf 并打印为 PDF,即在 html 上的记录旁边我有一个打印按钮,该按钮当前运行我的打印到 pdf 脚本。

【问题讨论】:

您可以参考reportlab.com/documentation/tutorial/… 【参考方案1】:

好的,所以我当然是一个新手并且正在学习,但是在这里我所做的,我基本上通过一个 url 将一个记录号传递到我的函数中。我确信有更好(更安全)的方法,但我现在用超级用户装饰器来保护它。 (来自这里:django @login_required decorator for a superuser)

% for rec in rec %
<ul>
  <b>Created: </b> rec.date    <b>Record:</b>  &nbsp <a href="% url 'main:record_specific' rec.exam_record_number %"> rec.exam_record_number </a>
<a href="% url 'main:print_record' rec.exam_record_number %" download style="float: right;">Print</a>
 <br>
    <p> rec.exam_record  |safe</p>
  <hr>
</ul>

【讨论】:

以上是关于打印到 PDF Django & ReportLab的主要内容,如果未能解决你的问题,请参考以下文章

用于 PDF 导出、Excel 导出和打印的 ReactJS 组件

在无头打印到 PDF 中禁用 Chrome 的默认页眉和页脚

Django - 使用 XHTML2PDF 创建和存储 PDF 文件

打印pdf

嵌入式 pdf 文件未在 Django 中显示

Django/Python:使用正确的语言生成 pdf