如何知道Flowable在使用ReportLab渲染PDF时放置在第几页?
如何确定每个可流动对象在渲染成PDF后会放在第几页(需要页码)?我在想给可流动对象添加一个自定义的ID属性,这样我就能知道它是什么。但是我该如何确定它会放在第几页呢?有什么好的方法可以实现这个目标吗?
2 个回答
2
你在什么情况下需要这些信息呢?这些信息会在文档生成的过程中变得可用,所以你可以在渲染之后,通过重写一些方法来获取,比如 afterPage
、afterDrawPage
和 afterFlowable
。然后,你可以从 DocTemplate
类中获取页码(我记得有一个类变量叫做 _currentPage
,不过你需要查看一下 ReportLab 的代码,因为我觉得这个没有文档说明)。
0
我最后找到了以下解决方案。给每个可流动的元素添加了一个自定义的ID,叫做flo_id。然后在BaseDocTemplate中重写了handle_flowable这个方法,在这里我检查并保存了这个ID。
class SignDocTemplate(BaseDocTemplate):
blocks_to_pages = {}
def handle_flowable(self, flowables):
f = flowables[0]
BaseDocTemplate.handle_flowable(self, flowables)
if hasattr(f,'flo_id'):
if self.blocks_to_pages.has_key(self.canv._pageNumber):
self.blocks_to_pages[self.canv._pageNumber].append(f.flo_id)
else:
self.blocks_to_pages[self.canv._pageNumber]= [f.flo_id,]
在构建文档之后,这个ID会在文档实例的blocks_to_pages变量中可用。