Отображение количества страниц с ReportLab - PullRequest
13 голосов
/ 12 марта 2009

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

Ответы [ 3 ]

11 голосов
/ 12 марта 2009

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

self.doc.build(pdf)

стало

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

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

4 голосов
/ 13 октября 2011

использовать 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))
1 голос
/ 12 марта 2009

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

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
...