Как узнать, на какой номер страницы был помещен растекающийся файл при рендеринге PDF с reportlab - PullRequest
2 голосов
/ 28 января 2012

Как определить, на какой странице (нужен номер страницы) будет каждый текучий после рендеринга в pdf.Я думал добавить собственный атрибут id в flowable, так что я буду знать, что это за flowable.Но как я могу определить, на какой странице он будет размещен?Каков наилучший способ добиться этого?

Ответы [ 2 ]

2 голосов
/ 28 января 2012

В какой момент вам нужна эта информация?Он становится доступным по мере создания документа, поэтому его можно получить после рендеринга, переопределив такие методы, как afterPage, afterDrawPage и afterFlowable.Затем вы можете получить номер страницы из класса DocTemplate (я полагаю, что есть переменная класса, которая называется что-то вроде _currentPage, но вам нужно проверить код ReportLab, поскольку я не думаю, что он задокументирован).

0 голосов
/ 28 января 2012

Я закончил со следующим решением. Добавлен собственный идентификатор flo_id для каждого потока. И переопределить метод handle_flowable в BaseDocTemplate, где проверяется и сохраняется идентификатор,

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,]

А после создания документа он будет доступен в экземпляре документа в переменной blocks_to_pages.

...