What is a good tool for PDF report generation in Python? I've checked out ReportLab, but it seems to be awfully low-level for what I want to do. My current hunch is to call TeX on the command-line and let it produce the PDF, but if there is something that is easier to work with (and looks professional - We'll send this to customers) I'd very much like a prod in the right direction.
I use pisa to generate PDF's from html files (which in turn get generated using xslt). It is very easy to use, but the official site is online last time i checked.
If you don't like ReportLab I would suggest generating HTML - there are dozens of ways to do this and converting to PDF for final output (html2pdf for example).
You can create PDFs easily (in my opinion) with just a Cairo binding.
Sure, it is low level: you don't have a GUI form editor and need to calculate coordinates by hand. But it also is extremely lightweight and direct; you have absolute control. Doing it via HTML does not give you that.
The outcome looks great and is very tiny file size wise.
I'm a big fan of pod. Design your report templates in open office writer (or ms word + sun's odf plugin) and then combine it with your data in a simple and flexible way. Very abstract and of course just a few lines of code.
You can generate odt documents this way with no external dependencies, for pdf generation you need to have open office running in server mode.
Is it feasible to generate your report content as reStructuredText? If so, check out the rst2pdf project.
Disclaimer: I have not used rst2pdf myself.
I would second mmaibaum's suggestion of generating HTML. It, along with CSS, will allow for much better positioning and layout. You can then use an HTML->PDF engine, such as PrinceXML (not free, but the output is amazing... actually there is a free version but it will put a PrinceXML logo on at least one of the pages) or an XML/XHTML->XSL-FO->PDF engine, such as CSSToXSLFO. This second option offers a bit more flexability, but you'll still need to choose an XSL-FO processor to turn this intermediate output into a PDF. Fop from the Apache project is a free one, but I can't vouch for how good the output is.
I worked on a system years ago that used ReportLab. It really wasn't too bad. All of our reports were pretty much of the same style so I created a base class that handled most of the formatting. The only thing sub classes had to do was set some properties and hand the data over to the base class. It worked out pretty well. After I did the ground work another programmer was able to come behind me and bang out a couple dozen reports in a couple weeks with no prior Python experience. So if most of your reports fit one or two formats using ReportLab should just require some up front work and then the rest is drudgery.
The only reason not to use LaTeX in this layer is that the installation is large and unwieldy, particularly on Windows. You are not going to get a reporting engine without either having a formatting system or working in low level graphics primitives.
If you want a higher level formatting toolkit that's a bit more lightweight than LaTeX you might look at Lout.
When you looked at ReportLab, did you check out the Platypus section? It's really very easy to use (Platypus is high-level, whereas pdfgen is fairly low-level). There's a good "Hello World" example in the developer's FAQ.
Take a look at Sphinx. A lot of Python projects are starting to use Sphinx, including Python itself. You type your documentation in reStructuredText, and get good-looking HTML and PDF output. Now that Matplotlib is using Sphinx, it even has a TeX-like equation formatting engine; see this pdf file for some more information.
I recommend you take another look at ReportLab. It has high-level constructs for page layout and "flowing" text, images, frames etc. It also has a nice styles system and, most importantly, a nice python API. Sure, it also provides access to low-level pdf, but you don't need to use this until you need it.
Of the other suggestions, they mostly suggest using some other format as an intermediary. This doesn't really help you. It just pushes the problem to finding a good library for writing the intermediate format.
I've also tried the Eclipse "BIRT" report generator as another OSS reporting tool but it was hard to learn, a resource hog and a pain to deploy. Python + ReportLab was way easier.