使用 PyPDF 将页码居中放置在页脚中
Center the page number in a footer using PyPDF
我正在使用 PyPDF 创建格式化报告。我希望页码(例如第 1 页,共 3 页)位于页脚的中央,这与 PyPDF 教程的显示方式非常相似。 Here's the tutorial I'm referencing.
下面是我放在页脚方法中的代码:
def footer(self):
genDateTime = "Report generated on: " + datetime.datetime.now().strftime('%m/%d/%Y %I:%M:%S %p')
page = 'Page ' + str(self.page_no()) + '/{nb}'
self.set_y(-10)
self.set_font('Arial', '', 9)
self.cell(0, 5, "Clinical Report: Confidential", 0, 0, 'L')
self.cell(0, 5, page, 0, 0, 'C')
self.cell(0, 5, genDateTime, 0, 0, 'R')
这是页面底部的屏幕截图。如您所见,Confidential 和 DateTime 标签按预期显示,但 Page # 标签右对齐:
感谢您的帮助。
您可以使您的单元格与页面大小相同,这样
self.cell()
可以将其居中 size/orientation
我认为问题在于您如何设置单元格宽度。 PyPDF 默认按顺序放置单元格,从先前放置的单元格的最右侧开始。当您调用 self.cell()
时,第一个参数是宽度——默认情况下,如果宽度为 0,它会使宽度扩展到页面的最右侧。因此,当您放置 self.cell(0, 5, "Clinical Report: Confidential", 0, 0, 'L')
时,该文本框一直延伸到页面右侧。然后,当您尝试放置 self.cell(0, 5, page, 0, 0, 'C')
时,它会将其置于该行剩余 space 的中心位置——但是没有剩余的 space,因此它只是将其放置在末尾。尝试像这样给第一个单元格一些宽度:
def footer(self):
genDateTime = "Report generated on: " + datetime.datetime.now().strftime('%m/%d/%Y %I:%M:%S %p')
page = 'Page ' + str(self.page_no()) + '/{nb}'
self.set_y(-10)
self.set_font('Arial', '', 9)
self.cell(5, 5, "Clinical Report: Confidential", 0, 0, 'L')
self.cell(0, 5, page, 0, 0, 'C')
self.cell(0, 5, genDateTime, 0, 0, 'R')
您可能必须使宽度大于 5 才能显示所有文本,但您可以尝试一下。
我正在使用 PyPDF 创建格式化报告。我希望页码(例如第 1 页,共 3 页)位于页脚的中央,这与 PyPDF 教程的显示方式非常相似。 Here's the tutorial I'm referencing.
下面是我放在页脚方法中的代码:
def footer(self):
genDateTime = "Report generated on: " + datetime.datetime.now().strftime('%m/%d/%Y %I:%M:%S %p')
page = 'Page ' + str(self.page_no()) + '/{nb}'
self.set_y(-10)
self.set_font('Arial', '', 9)
self.cell(0, 5, "Clinical Report: Confidential", 0, 0, 'L')
self.cell(0, 5, page, 0, 0, 'C')
self.cell(0, 5, genDateTime, 0, 0, 'R')
这是页面底部的屏幕截图。如您所见,Confidential 和 DateTime 标签按预期显示,但 Page # 标签右对齐:
感谢您的帮助。
您可以使您的单元格与页面大小相同,这样
self.cell()
可以将其居中 size/orientation
我认为问题在于您如何设置单元格宽度。 PyPDF 默认按顺序放置单元格,从先前放置的单元格的最右侧开始。当您调用 self.cell()
时,第一个参数是宽度——默认情况下,如果宽度为 0,它会使宽度扩展到页面的最右侧。因此,当您放置 self.cell(0, 5, "Clinical Report: Confidential", 0, 0, 'L')
时,该文本框一直延伸到页面右侧。然后,当您尝试放置 self.cell(0, 5, page, 0, 0, 'C')
时,它会将其置于该行剩余 space 的中心位置——但是没有剩余的 space,因此它只是将其放置在末尾。尝试像这样给第一个单元格一些宽度:
def footer(self):
genDateTime = "Report generated on: " + datetime.datetime.now().strftime('%m/%d/%Y %I:%M:%S %p')
page = 'Page ' + str(self.page_no()) + '/{nb}'
self.set_y(-10)
self.set_font('Arial', '', 9)
self.cell(5, 5, "Clinical Report: Confidential", 0, 0, 'L')
self.cell(0, 5, page, 0, 0, 'C')
self.cell(0, 5, genDateTime, 0, 0, 'R')
您可能必须使宽度大于 5 才能显示所有文本,但您可以尝试一下。