You can use direct pdf dedicated methods, or use a regular TCanvas to draw your pdf pages. You can also first draw your content into a TMetaFile, then create the pdf file from it.

Can optionally embed True Type font, or compress any bitmap image as jpeg.
Unicode ready (direct call of the UniScribe WinApi), e.g. handle Arabic glyphs.
A reporting engine is also available, for easy creation of reports from code.

Here are the changes from version 1.8.8 to 1.10:
- code modifications to compile with Delphi 6 compiler
- new TPdfImage.CreateJpegDirect method and PixelWidth/PixelHeight properties
- file now contains the SQLite3Pages unit, for easy report creation from code (with antialiaised preview and on demand printing or pdf/txt export)
- crc32 is now coded in inlined fast asm (crc32.obj is no longer necessary)
- crc32 hashing is performed using 8 tables, for better CPU pipelining and faster execution
- crc32 tables are created on the fly during unit initialization, therefore it saves 8 KB of code size from standard crc32.obj, with no speed penalty
- both zip library obj files (i.e. deflate.obj and trees.obj) updated to version 1.2.5

Compatible with Delphi 6 up to Delphi XE.

Source code released under GPL/LGPL/MPL license, on choice.
That means: free, like a bird, and like a beer.