At $dayjob we mostly use htmldoc to create our PDFs. So we build the HTML and then run it through htmldoc to get the PDF. It's not perfect, and you don't get all the control like you can with PDF::API2. But one advantage of this method is that it gives us a web-accessible version for free!
And if you have an existing PDF you want to add pages to, look at importpage(). In our case, we have an existing report in PDF format that we want to add to a dynamic PDF document. It generally works great (we're using an older release since the latest require 5.8+), although I occasionally find it goes into deep recursion on some file when importing the pages. Haven't figured why, but my workaround is just to do more in htmldoc. :-)