Отображение количества страниц с помощью 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