Take a look at how the Invoices starter solution prints an invoice.
It uses a list view layout based on the portal's table for printing an invoice with fields from the parent table included in the header, footer or a grand summary part. With this method, you use a script with a scripted find or Go to Related records to change from your current layout to change to the print layout where you find all portal records for the current record on your original layout in order to print them.
You can modify this method by putting the parent record fields in a sub summary layout part to serve as a "sub heading". Then you can find all records and sort them by the Match field used to link your records to group each set of Person records under a Location heading.