Я пытаюсь добавить простую «страницу x of y» в отчет, составленный с ReportLab. Я нашел this old post, но, может быть, через шесть лет возникло нечто более простое? ^^;
я нашел this recipe тоже, но когда я использую его, в результате PDF отсутствует изображение ..Показывать число страниц с ReportLab
ответ
Я смог реализовать подход NumberedCanvas от ActiveState. Это было очень легко сделать и не изменило большую часть моего существующего кода. Все, что мне нужно было сделать, это добавить этот класс NumberedCanvas и добавить атрибут canvasmaker при создании моего документа. Я также изменил измерения, где отображается «х у»:
self.doc.build(pdf)
стал
self.doc.build(pdf, canvasmaker=NumberedCanvas)
док является BaseDocTemplate и PDF мой список текучих элементов.
Имеются ли изображения с этим подходом? – Joril
У меня есть изображения, отображаемые на pdf без проблем. Если у вас возникли проблемы с изображениями, вы могли бы разработать или задать новый вопрос? – adam
Похоже, что этот метод нарушает ссылки внутри документа. Когда я использовал его, все ссылки из одной части документа в другую часть начали перемещаться, чтобы частично отбросить первую страницу, а не перейти к их фактическим целям. – CoreDumpError
Просто выкапывать код для вас, мы используем это:
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
Да, но сложная часть состоит в том, как вычислить часть «y» :) То есть, общее количество страниц – Joril
использование 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))
это работает, только если у вас есть несколько проходов – jake77
У меня была эта же проблема. Вот рецепт из ActiveState, использующий NumberedCanvas, который на самом деле работает: http://code.activestate.com/recipes/576832/ – Esteban