Центрируйте номер страницы в нижнем колонтитуле с помощью PyPDF - PullRequest
0 голосов
/ 07 ноября 2018

Я использую PyPDF для создания отформатированного отчета. Я хочу, чтобы номер страницы (например, страница 1 из 3) был расположен по центру в нижнем колонтитуле, в точности так, как показано в учебнике по PyPDF. Вот учебник, на который я ссылаюсь.

Ниже приведен код, который я поместил в метод нижнего колонтитула:

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 # выровнена по правому краю:

Screenshot

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Я думаю, проблема в том, как вы устанавливаете ширину ячейки. PyPDF по умолчанию размещает ячейки последовательно, начиная с крайнего правого угла ранее размещенной ячейки. Когда вы вызываете self.cell(), первым аргументом является ширина - по умолчанию, если ширина равна 0, ширина расширяется до крайнего правого угла страницы. Поэтому, когда вы помещаете self.cell(0, 5, "Clinical Report: Confidential", 0, 0, 'L'), это текстовое поле расширяется до правого края страницы. Затем, когда вы пытаетесь поместить self.cell(0, 5, page, 0, 0, 'C'), он центрирует его в оставшемся месте на этой линии - но места не остается, поэтому он просто помещает его в конец. Попробуйте задать ширину вашей первой ячейки примерно так:

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, чтобы отобразить весь текст, но вы можете поиграть с этим.

0 голосов
/ 08 ноября 2018

Вы можете сделать вашу ячейку того же размера, что и страница, чтобы

self.cell()

может центрировать его по размеру / ориентации

...