Headless Chrome to the rescue! Chrome can run as a cli tool, and print a pdf file from a url. All I had to do was make some layout tweaks to make everything printer-friendly.
The command is pretty straight forward:
google-chrome --headless --disable-gpu \ --print-to-pdf="output.pdf" https://spatie.be
--disable-gpu flag isn't really relevant but it's necessary to use Chrome headless.
I wrote an Artisan command to generate a pdf from a set of results, and everything was up and running in my local environment in no time. Since Chrome ships with the CLI tool, all I had to do was write a little alias.
alias google-chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
The next step was getting this to work on an actual server, in this case a freshly provisioned Forge server. There are a few guides for installing Chrome on Ubuntu, but here's what ultimately did the trick for me.
sudo apt-get install libxss1 libappindicator1 libindicator7 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb # If there are errors running this, ignore them for now sudo dpkg -i google-chrome*.deb # This fixes the errors that appeared in the previous command sudo apt-get install -f
That's it! I created an environment variable to set the Chrome path in my application, and It Just Works™