For creating PDF files from scratch, I usually go the route of generating LaTeX files first (Template::Plugin::Latex can be helpful for that), and then run them through pdflatex.

This is mostly because I don't want to spend too much time on layout questions, and most (all?) of the PDF manipulation CPAN modules force me to do that.

When the files dominated by graphics (and not text), sometimes it's easier to generate SVG first. Since SVG is an XML format, tooling support is quite good. Then inkscape (good quality, but slow to start up) or svg2pdf (using cairo as a backend; much faster, usually good enough) can be used to turn the SVG file into PDF.