По всему миру люди борются с PDF. Скажем, нужно сгенерить отчет, и начинается: рендерим файл LaTeX и скармливаем pdflatex. Глючно, не очевидно, требует установки Латеха и пакетов. Рассыпается при смене минорной версии. Кросплатформенно только в теории.

Можно собрать при помощи Java-библиотеки. Импортировать двадцать классов com.pdf.MySuperCellFactory и как-то их соединить. Тоже не очевидно, трудно дебажить.

Неплохой вариант: сгенерить HTML и напечатать PDF при помощи headless-Хрома. Уже лучше, но требует установки Хрома и chromedriver. Запускать Хром на каждый чих расточительно, нужна отдельная машина.

Короче, с какой стороны ни зайди, везде плохо.

Так вот: почему бы не генерить документы в HTML? Стили и картинки зашиты в один файл через src=data:base64. Получаем один .html-файл без зависимостей. Браузер есть везде, не нужно ничего ставить. При желании можно адаптировать стили под мобильный экран, чтобы смотрелось везде хорошо.

Почему так не делают? Зачем PDF, если вот он, HTML: любой шрифт, картинки, таблицы и все прочее?