I use the Prawn gem. I usually have a Rails controller to spit out the PDF files, even if the main project isn't Rails.
Prawn provides very fine control over the rendering, at the expense of having to finely control your render.
You can use your own fonts (and have to, for Asian languages etc) and it is easy to do layouts where the size is fixed and you shrink the text down to fit it in (or truncate it). On the other hand is not good for really rich text layout like you can do in HTML and CSS, where the size might vary.
I'm Prawn's maintainer and I think the "fine control over rendering at the cost of having to finely control your renderer" is spot-on.
We are working on a long term solution to that problem by finally focusing on building an extension and components layer for Prawn, which would hopefully allow all sorts of other gems to fill in these gaps. But it's a ways off into the future.
If going to Asciidoc is an option, Asciidoctor is now Prawn based for PDF output, and might make sense for simple reports:
Strong endorsement of the second paragraph here. I love Prawn, but would probably not suggest it for casual reporting. If getting that right is core to the app, though, it is a great option.
I'll add another vote for prawn. It's a great library that has allowed us a lot of flexibility with our generation of pdfs. The author Gregory Brown, as well as the current maintainers, are very active and have done an amazing job at getting it to 1.0. I highly recommend it!
Prawn provides very fine control over the rendering, at the expense of having to finely control your render.
You can use your own fonts (and have to, for Asian languages etc) and it is easy to do layouts where the size is fixed and you shrink the text down to fit it in (or truncate it). On the other hand is not good for really rich text layout like you can do in HTML and CSS, where the size might vary.