The approach here is to add a toHtml() to my report elements and when you print the report the report can go down the list of its elements to generate a web page, send it off to a web view with a convenience print() method, and I just use that. My main objection is that bringing in Chromium just for printing seems wasteful, but it does save me writing a lot of code that I'd rather not write today.
On the plus side, this does let me get HTML export on reports basically for free, so I might add that in. Same approach will also work for CSV export, which I think would be useful.