Where we can, we use LaTeX templates. In other places we use Python to generate Word (python-docx) or PowerPoint presentations (python-pptx).
A few years ago I had success generating WYSIWYG PDFs using HTML5 and the printable classes in CSS Bootstrap (https://getbootstrap.com); in that particular case I used CherryPy (https://cherrypy.org) under IIS and sent the rendered HTML to pdfkit (https://pypi.org/project/pdfkit/) to generate PDFs. That was preferred over relying on the user to print to the page to PDF from their web browser.
A few years ago I had success generating WYSIWYG PDFs using HTML5 and the printable classes in CSS Bootstrap (https://getbootstrap.com); in that particular case I used CherryPy (https://cherrypy.org) under IIS and sent the rendered HTML to pdfkit (https://pypi.org/project/pdfkit/) to generate PDFs. That was preferred over relying on the user to print to the page to PDF from their web browser.