如何知道Flowable在使用ReportLab渲染PDF时放置在第几页?

2 投票
2 回答
1401 浏览
提问于 2025-04-17 11:17

如何确定每个可流动对象在渲染成PDF后会放在第几页(需要页码)?我在想给可流动对象添加一个自定义的ID属性,这样我就能知道它是什么。但是我该如何确定它会放在第几页呢?有什么好的方法可以实现这个目标吗?

2 个回答

2

你在什么情况下需要这些信息呢?这些信息会在文档生成的过程中变得可用,所以你可以在渲染之后,通过重写一些方法来获取,比如 afterPageafterDrawPageafterFlowable。然后,你可以从 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变量中可用。

撰写回答