this seems to be a good candidate for you : PDF-111
Especially PDF::Core, which appears to let you write PDF primitives & etc. The interface looks a bit hairy, though.
Of course, the ususal warantee applies; I'm just a search monkey, this module may corrupt memory, drive or children, cause pets to go frothy, etc.