Daniel, I misunderstood you a bit originally. I now also read your blog post briefly.
I still think that amount of code to generate a visual layout shown in your post might become hard to maintain very soon.
Keeping your report design template separate from other code that serves data also fits better with MVC patterns (the jrxml/jasper report template = view).
You'll be able to write more effective and meaningful test cases for your Java code e.g. to check that it passes the right data, picks the right report template etc.
All good for the long run if your code is creating important documents like invoices.
Thank you for sharing dynamicreports info - it looks promising and looks less commercialised than Jasper.
But as such you can create fairly complex, dynamic, and conditional layouts in JasperReports - it has a powerful expression support - such as XPath, if your incoming data is XML/JSon.
And I've been able to achieve all this with the community licence (but its worth checking if their commercial licence is at all required for your particular deployment).
On versions and migration, I think it important to use a dependency management and build solution like maven (JDev/ADF and other FMW applications have adequate support for this) but this is true for any Java based framework so not specific to iText/Jasper.
This is a general comment, Daniel, I know your blog post is only intended to show an example - but instead of putting third party libraries on a google drive, I would point your readers to the original download links for those libraries, or just tell them specific version/build numbers, or even better, just create a maven pom file for your project.