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

Python 如何使用reportlab在PDF中添加总页数,python,django,reportlab,Python,Django,Reportlab,我可以使用上面的代码显示页码,但我的问题是如何显示“第X页,共Y页”,其中Y是页数,X是当前页 我遵循了这一点,但他们解释说使用了canvasmaker,其中我在构建中使用了OnlaterPages参数 我如何使用canvasmaker实现上述目标,或者是否有任何使用OnLaterPages的解决方案?这里是一个改进的配方,可以处理图像。另一个可能的解决方法是使用pyPDF(或任何其他具有此功能的pdf库)读取doc.build()之后的总页数,然后通过交换相应的段落(),用收集到的信息重建故事

我可以使用上面的代码显示页码,但我的问题是如何显示“第X页,共Y页”,其中Y是页数,X是当前页

我遵循了这一点,但他们解释说使用了canvasmaker,其中我在构建中使用了OnlaterPages参数


我如何使用canvasmaker实现上述目标,或者是否有任何使用OnLaterPages的解决方案?

这里是一个改进的配方,可以处理图像。

另一个可能的解决方法是使用pyPDF(或任何其他具有此功能的pdf库)读取
doc.build()之后的总页数
,然后通过交换相应的
段落()
,用收集到的信息重建故事。这种方法可能更粗糙,但不需要子类就可以实现

例如:

   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)

我认为您误解了链接文章提供的解决方案。他们的方式覆盖了画布的保存功能。如果您想使用Platypus(我假设这是因为您引用了
onlaterpages
)进行操作,这里至少提到了一种其他方法
from pyPdf import PdfFileReader
[...]
story.append(Paragraph('temp paragraph. this will be exchanged with the total page number'))
post_story = story[:] #copy the story because build consumes it
doc.build(story) #build the pdf with name temp.pdf
temp_pdf = PdfFileReader(file("temp.pdf", "rb"))
total_pages = cert_temp.getNumPages()
post_story[-1] = Paragraph('total pages: ' + str(total_pages))
doc.build(post_story)