Your question seems pretty specific to your situation, and while there might be a plug-in out there that can achieve what you're looking for, it probably won't fill all your needs without some hackery.
So, have you considered creating a profile view on the front end and just setting up a print stylesheet for it?
You could pass the user's ID to the page as a
$_GET variable, or your could set up some custom rewrite rules so the URL is prettier (something like example.com/profile/1234, where 1234 is the user's ID). You could also set up the page to just adapt based on
get_currentuserinfo(), but if you ever needed to print off a user's page for your own purposes it wouldn't be as easy, unless you provided an override where if a user_id was passed to the page it would pull up that user's information and if a user_id wasn't provided, it pulled up the currently logged in user's information.
Then you should be able to pull in all the fields using ACF's
the_field() method with the user's ID, I'm not sure if ACF has a method that will pull in all of the fields at once, but you could also create your own
$wpdb query to grab all the info you need for the user or use the
You could also redirect the user to their profile after they register by tying into the
user_register action and using
wp_redirect() to redirect the newly registered user to the profile so that they can print it.
For the print button you can use the
window.print() method, or just rely on the user clicking print (the print stylesheet should take effect either way).
If you are interested in PDF generation, you can use the FPDF class to generate one, but, as far as I know, the user will have to download/open the file and then print it.
As a sidenote: if you are only looking to generate the PDF for printing purposes, providing a print stylesheet is probably an easier solution, as most people can generate a PDF from the print options for their browser and implementing a print stylesheet is generally much simpler than integrating a PDF generation library.