Отображение количества страниц с помощью ReportLab

Я пытаюсь добавить простую "страницу x of y" в отчет, созданный с ReportLab. Я нашел этот старый пост это, но, может быть, через шесть лет возникло нечто более прямолинейное? ^^;
Я нашел этот рецепт, но когда я его использую, в результирующем PDF файле отсутствуют изображения.

Ответы

Ответ 1

Мне удалось реализовать подход NumberedCanvas от ActiveState. Это было очень легко сделать и не изменило большую часть моего существующего кода. Все, что мне нужно было сделать, это добавить этот класс NumberedCanvas и добавить атрибут canvasmaker при создании моего документа. Я также изменил измерения того, где отображается "x of y":

self.doc.build(pdf)

стал

self.doc.build(pdf, canvasmaker=NumberedCanvas) 

doc - это BaseDocTemplate, а pdf - мой список текучих элементов.

Ответ 2

использовать doc.multiBuild

и в методе заголовка страницы (определенном "onLaterPages =" ):

global TOTALPAGES
if doc.page > TOTALPAGES:
    TOTALPAGES = doc.page
else:
    canvas.drawString(270 * mm, 5 * mm, "Seite %d/%d" % (doc.page,TOTALPAGES))

Ответ 3

Просто выкапывая какой-то код для вас, мы используем это:

SimpleDocTemplate(...).build(self.story,
                             onFirstPage=self._on_page,
                             onLaterPages=self._on_page)

Теперь self._on_page - это метод, который вызывается для каждой страницы, например:

def _on_page(self, canvas, doc):
    # ... do any additional page formatting here for each page
    print doc.page