如何使用reportlab在PDF中添加总页数

时间:2012-09-02 06:01:12

标签: python django reportlab

   def analysis_report(request):

       response = HttpResponse(mimetype='application/pdf')
       response['Content-Disposition'] = 'attachment;filename=ANALYSIS_REPORT.pdf'
       buffer = StringIO()
       doc = SimpleDocTemplate(buffer)
       doc.sample_no = 12345
       document = []
       doc.build(document, onLaterPages=header_footer)

   def header_footer(canvas, doc):
       canvas.saveState()

       canvas.setFont("Times-Bold", 11)
       canvas.setFillColor(gray)
       canvas.setStrokeColor('#5B80B2')
       canvas.drawCentredString(310, 800, 'HEADER ONE GOES HERE')
       canvas.drawString(440, 780, 'Sample No: %s' %doc.sample_no)

       canvas.setFont('Times-Roman', 5)
       canvas.drawString(565, 4, "Page %d" % doc.page)

我上面的代码我可以打包显示页码,但我的问题是如何显示“Y页面X”,其中Y是页数,X是当前页。

我遵循了这个http://code.activestate.com/recipes/546511-page-x-of-y-with-reportlab/,但他们使用 canvasmaker 进行了解释,因为我在构建中使用 OnlaterPages 参数。

如何使用canvasmaker实现上述功能,或者是否有使用OnLaterPages的解决方案?

2 个答案:

答案 0 :(得分:5)

以下是改进的配方http://code.activestate.com/recipes/576832/,它应与图像配合使用。

答案 1 :(得分:2)

另一种可能的解决方法是使用pyPDF(或任何其他具有功能的pdf-lib)来读取doc.build()之后的总页数,然后通过交换相应的{{来重建故事和收集的信息。 1}}的。这种方法可能更加苛刻,但没有子类化的诀窍。

示例:

Paragraph()