PDF::API2 has a lot of functionality, but it's extremely esoteric. I've found the documentation to be very difficult to mine for the information needed. You must get everything "just right" in order for the PDF to be rendered properly, and as if your requirements change, it tends to have a cascade effect on your existing code to get everything to play together well. For example, inserting one element at a particular location may mean that you need to re-calculate the positions of all the other elements rendered on that page, down to single-point precision, depending on how you're using the API.
As a result, we fairly recently abandoned a solution that had been using PDF::API2 and instead started generating HTML instead, which we then converted to PDF using an external tool. There are some good free ones, for example PDF::FromHTML as suggested by Sinan Ünür. There are also some more feature-rich commercial ones if you want to get fancy with your HTML and have it translate nicely into PDF (although I haven't used them personally).
If you need to do some simple manipulation on existing PDF's, rather than generating them, I would use (and do use) CAM::PDF.
In short, I don't recommend PDF::API2, unless you're willing to spend a large amount of time figuring out all of its intricacies and personally supporting your app well into the future. It's extremely powerful and feature-rich, but unless you know exactly what you're doing, the lack of documentation and examples will hinder you more than the module helps.