There are a number of options:
- Anton Scheffer wrote a PL/SQL package called AS_PDF3 that covers all the basics: Different fonts (including TrueType), images, and tables.
- There's the commercial PL/PDF package that has more features, such as the ability to use existing PDF documents as templates for new documents, compression, encryption, and more. There's also an extra Toolkit component which allows you to extract pages from existing PDFs, combine multiple PDFs into one document, manipulate document metadata, and so on.
- Using the above solutions, the PDF document must be generated via (your own) PL/SQL code. If you are looking for a visual report editor, check out PL-JRXML2PDF from Andreas Weiden.
There's a nice video of PL-JRXML2PDF in action over at Vimeo.
Generate PDF Reports for Free in Oracle Apex Using PL-JRXML2PDF and iReport Designer from Paul the Hermit on Vimeo.
Also, if you are using Apex 4.2 or later with the Apex Listener (aka Oracle REST Data Services), you can output report regions to PDF, and customize the layout via XSL-FO templates as explained by Mark Sewtz in his blog post.