Hay varias opciones. Todas pasan por un lenguaje intermedio.
El mas basico es markdown:
https://commonmark.org
Asi guardas en "texto plano" y luego lo conviertes a otros formatos, como html o pdf. Este es util cuando necesitas es algo parecido a Word, donde necesitas texto para documentos.
Para mas complicaciones HTML es lo mejor. Puedes ir de HTML a PDF, el lio es que porque html es mas complejo la conversion lo es mucho mas. Aun si limitas el html a unos cuantos tags el engine por defecto debe asumir que puede tener de todo.
Asi que si es posible usa markdown o similar. Mas alla depende de requerimientos.