使用PyPDF在页脚中居中页码

时间:2018-11-07 20:53:21

标签: python pdf 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')

这是页面底部的屏幕截图。如您所见,“机密”和“日期时间”标签按预期显示,但是“页面#”标签是正确的:

Screenshot

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为问题在于您如何设置像元宽度。默认情况下,PyPDF从先前放置的单元格的最右边开始顺序放置单元格。调用 <ListView.Header> <StackLayout Style="{StaticResource DefaultStackLayout}"> <StackLayout x:Name="ZeroHeaderContainer" HeightRequest="0" IsVisible="{Binding SomeBooleanField}"/> <StackLayout x:Name="NormalHeaderContainer" Style="{StaticResource DefaultStackLayout}" HorizontalOptions="Fill" IsVisible="{Binding SomeBooleanField,Converter={StaticResource InverseBooleanConverter}}"> </StackLayout> </StackLayout> 时,第一个参数是width -默认情况下,如果width为0,它将使width扩展到页面的最右边。因此,当您放置self.cell()时,该文本框将一直扩展到页面右侧。然后,当您尝试放置self.cell(0, 5, "Clinical Report: Confidential", 0, 0, 'L')时,它将居中放置在该行的剩余空间中-但由于没有剩余空间,因此只能将其放置在末尾。尝试给第一个像元一个宽度,如下所示:

self.cell(0, 5, page, 0, 0, 'C')

您可能必须使宽度大于5才能显示所有文本,但是您可以使用它。

答案 1 :(得分:0)

您可以将单元格设置为与页面相同的大小,以便

self.cell()

可以将其居中到该尺寸/方向