You can only print what is visible to the browser. So you need to design that layout. Depending on size, you may want to handle page breaks - standard CSS will allow you to do that (there are plenty of examples on the internet, e.g. w3schools.com).
Once you have a layout, you need to repeat it for each document selected. That's precisely what the Repeat Control is for It's basically a "for" loop iterating over the collection passed into the repeat control and generating the HTML for each element in the collection). You'll be able to skip the step of putting documents in a folder. Because to put them in the folder, you've got a collection of UNIDs or NoteIDs. Once you've got a collection of UNIDs or NoteIDs, you can use that as the source for the Repeat Control (value property, var will give you each element in the collection, i.e. each UNID; set rows property to more than can be selected, so you get everything). Within the repeat control, you can then have a dominoDocument datasource computing the documentId property and ensuring you've set ignoreRequestParams="true" (no point setting documentId and leaving the risk of it using the URL for the documentId).
Put this on its own XPage, in your button store the collection on UNIDs in sessionScope so you can pass it across (you can't store the documents themselves because Domino objects can't be stored in scoped variables), then launch that XPage with the repeat control on it.
I'm not sure of the level of your experience with XPages, so you may already be very comfortable with what I've explained. If not, I've tried to explain conceptually what's happening, because the understanding is significantly more important than just the final code. If this sounds complex for you, I would strongly recommend persevering and getting your head around it. It will give you experience that will be extremely reusable and vastly enhance the potential of your XPages applications.