Open source implementation of RML (Report Markup Language) from ReportLab
RML User Guide (or beginner tutorial)
Not all tags are supported, but most of them work.
pip install trml2pdf
Create a PDF file:
import trml2pdf
print trml2pdf.parseString(file('file.rml','r').read())
If you are using this for Django you can dynamically create an .rml file with the template system and then render it.
from django.template.loader import get_template
from django.template.context import Context
data = {'key1': 'foo'}
template = get_template('template.rml')
context = Context(data)
xmlstring = template.render(context)
pdfstr = trml2pdf.parseString(xmlstring)