PrimeFaces, like all
JSF tagsets, renders the actual page as HTML.
HTML is not a good medium for 100% faithful display (or printing) of content. The HTML client (browser) is permitted to do major re-arrangement of the content to accomodate the page to the users specific display.
You can provide greater control over positioning, scaling, and so forth using CSS tags, but for 100% printer fidelity, you would have to select a more rigorous output format, such as PDF.
Note that CSS has the ability to alter rendering based on what media you are outputting to. I use this feature to hide buttons and other things that are meaningless on a printed page.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.