We use shrimp(https://github.com/adjust/shrimp) which internally uses phantomjs. It works well but you will need to do the page break yourself which can become a pain.
I havent tried charts with princexml, but flying-saucer has capability to do custom rendering. So if you want, you can use a service to get image of your chart and then render that in the pdf as image.
Its a terribly painful. I have tried every single one of the options. I am still finding it extremely difficult to get it working. Once I managed to get it to print to pdf, then started the bigger problem 'Paging'.
Paging is quite painful. I am writing my own code to split tables to fit into pages.
If you can solve this problem. I would gladly pay.