2015-03-23 5 views
0

Я использую reportlab для создания PDF-документа с двумя типами отчетов.Добавить Заголовок на основе Условие

Предположим, что отчеты являются r1 и r2. В каждом отчете может быть более 2-3 страниц. Поэтому я хочу добавить заголовок как текст со второй страницы каждого отчета.

Например, на странице отчетов r1 добавить «r1 report continue ...» и на страницах r2 report добавить «r2 report continue ...» Как я могу это сделать.

В настоящее время я создаю список элементов и передаю его функции построения шаблона. Поэтому я не могу определить, какой отчет обрабатывается.

Например ...

elements = [] 
elements.append(r1) 
... 
..... 
elements.append(r2) 
doc.build(elements) 

ответ

0

Наконец мне удалось решить. Но я не уверен, что это правильный метод. Большое спасибо grc, который предоставил this ответ, откуда я создал свое решение.

Как и в ответе grc, я создал функцию afterFlowable callback.

def afterFlowable(self,flowable): 

    if hasattr(flowable, 'cReport'): 

     cReport = getattr(flowable, 'cReport') 
     self.cReport = cReport 

Затем при добавлении данных для отчета r1 пользовательский атрибут будет создан

elements.append(PageBreak()) 
elements[-1].cReport = 'r1' 

Тот же код при добавлении данных для отчета r2

elements.append(PageBreak()) 
elements[-1].cReport = 'r2' 

Тогда в функции OnPage из шаблон

template = PageTemplate(id='test', frames=frame, onPage=headerAndFooter) 

def headerAndFooter(canvas, doc): 

     canvas.saveState() 

     if cReport == 'r1': 
      Ph = Paragraph("""<para>r1 Report (continued)</para>""",styleH5) 
      w, h = Ph.wrap(doc.width, doc.topMargin) 
      Ph.drawOn(canvas, doc.leftMargin, doc.height+doc.topMargin) 

Обратите внимание, что я просто копирую и вставляю части своего кода ...

Смежные вопросы