I am creating PDFs tables with Reportlab platypus. I don´t know, when the page is full because of the dynamic content. How can I check out, if I am at the end of the page ?
Is there any method in platypus to check end of page?
I have list of companies and each company has multiple business units with their charges.
companies = [('company1', 'businessunit1', 500),
('company1', 'businessunit2',400),
('company2', 'businessunit3',200),
('company2', 'businessunit4', 700),
('company3', 'businessunit5', 800)
]
The above list should generate 3 tables each for one company, but if this list has multiple companies which will generates multiple tables and if any table reaches end of page which will break.
fields = ['company name', 'business unit name', 'charge']
for i, comp in enumerate(companies):
charges = []
document.append(Paragraph("<b>%s</b>" %comp[i][0], STYLES['COMPANY_NAME']))
document.append(Spacer(1, 5))
charges.append(comp[i][0])
charges.append(comp[i][1])
charges.append(comp[i][2])
charges_table = LongTable([fields] + charges, colWidths=(30,150,100))
charges_table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.gray),
('FONTSIZE', (0, 0), (-1, 0), 6),
('GRID', (0, 0), (-1, -1), 1, colors.gray),
('FONTSIZE', (0, 0), (-1, -1), 7),
('TEXTCOLOR',(0,-1),(-1,-1),'#FF4500'),
])
)
charges_table.hAlign = 'CENTER'
document.append(charges_table)
You should provide some sample code so we know what you’re trying to accomplish. Why do you want to know when the page has ended? To draw new content? To print out some diagnostic information?
Assuming you want to draw something after a page has been rendered, you can use the
afterPage()method, which is provided in theBaseDocTemplateclass. From ReportLab’s documentation:Basically, it’s called by
BaseDocTemplateafter a page has been drawn. In the source code, it includesself, as it is part of theBaseDocTemplateclass, so you can access its canvas!You can override the class in your own script, and then draw onto the canvas directly.
Now you can use
MyDocTemplatethe same way you would use BaseDocTemplate in your main logic: