Creating dynamic headers in Reportlab
When writing code to make a report, you never truly know what you are going to get into. In a recent Python project, I was using the excellent ReportLab libraryand things were going smoothly. But then I needed make a header that would appear on every page. This isn’t took bad – you just create a function that goes on the document when you build it. But the API doesn’t support that terribly well – the function that you give to the Document object takes the Document and the Canvas as the only parameters… but I have content to put in there!
In the dusty part of my brain I remembered currying functions from reading several years ago. They are also called “partial functions”. As a surprise to no one, Python 3 has a standard library function for this. As I combined that with how I knew the header had to be made, I was impressed how simple it seemed to be. The code isn’t complicated at all!
Here is a Gist with how I set this up. Some understanding of ReportLab is assumed, but I think it works well. You can do something similar for a footer as well. Actually you can have both render in the same function.