The best available is Browsershot by Spatie. It uses a (by default) headless Chromium browser to render the HTML/CSS and print it to PDF.
It can be a bit finicky to set up (requires Puppeteer, which is super-easy in some environments and a bit of a pain in others), but once you get it working, it works quite well.
As long as you’re within your Laravel ecosystem, you can feed Browsershot a rendered view as the data to PDF-ify; you don’t have to load a URL through an HTTP request. Check in your controller whether the user is allowed to create the PDF, then build your view data and manually render the view, passing the rendered data to Browsershot.
But be aware that printing to a PDF file will never be an exact replica of what the browser shows. Screen and print are very different media, and you’ll need to carefully craft your CSS for everything to look how you want it when the PDF is created.