如何知道在使用reportlab渲染pdf期间放置了哪些页面可流动页面

时间:2012-01-28 14:21:56

标签: python pdf reportlab

在渲染为pdf之后,如何确定每个页面(需要页码)都是可流动的。我想将自定义id属性添加到flowable中,所以我会知道它的流动性。但是我如何确定它将放置在哪个页面上? 实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您在什么时候需要这些信息?它在构造文档时变得可用,因此您可以在通过覆盖afterPageafterDrawPageafterFlowable等方法进行渲染后获取它。然后,您可以从DocTemplate类中获取页码(我相信有一个类似_currentPage的类变量,但您需要检查ReportLab代码,因为我认为它没有记录)

答案 1 :(得分:0)

我以下面的解决方案结束了。为每个flowable添加了一个自定义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,]

在构建doc之后,它将在blocks_to_pages变量的文档实例中可用。