任何人都可以展示一个示例,如果文档中有多个页面,如何在 Reportlab 生成的文档上显示“从 Y 开始的 X 页”(如果只有一页,则不显示任何内容)。我知道一些解决方案,但它们都标记页面,无论总页数如何。
其实这很简单。 Asif 对 SO How to add total page count in PDF using reportlab 的回答帮助了我。唯一需要的是在 save() 函数中添加“if”子句。原始代码在这里: http://code.activestate.com/recipes/576832/
调整后的 save() 函数是:
def save(self):
"""add page info to each page (page x of y)"""
num_pages = len(self._saved_page_states)
for state in self._saved_page_states:
self.dict.update(state)
### just a little tweek here
if num_pages > 1:
self.draw_page_number(num_pages)
canvas.Canvas.showPage(self)
canvas.Canvas.save(self)
如果使用报告实验室 .prep 标记语言,则以下内容可用于显示当前页码:
<drawString x="475" y="30"Page <pageNumber/></drawString>
如果您编写 Preppy 模板来生成 RML,然后在页面上生成类似
2 / 14
的内容:
<pageNumber/> / <getName id="last_page" default="X"/>
<pageNumber/>
仅给出当前页码,总页数很棘手。 您必须在故事中的某个位置定义一个 last_page
变量(可能在 fag 末尾以进行正确计算):
<story>
<!-- bunch of content -->
<namedString id="last_page"><pageNumber/></namedString>
</story>