You're right, I think merged a few things together when writing the comment. What I meant is that (if you ignore PrinceXML and focus on FOSS) you're down to 3 options:
- wkhtmltopdf
- weasyprint
- (headless) chromium with puppeteer et al.
The first one I found to be unreliable, the second one is super slow and the third can be annoying to work with.
There's also https://weasyprint.org/ which doesn't use any browser engine, but rather a custom renderer.
And both of those (and Prince) can be used as a backend by Pandoc (https://pandoc.org/)