По вашему требованию, XSL-FO может просто помочь. Гораздо чище создавать pdf-файлы непосредственно из данных, а затем идти по громоздкому пути html, если только вам не нужно также отображать html, тогда вы можете рассмотреть возможность преобразования html в pdf, но это всегда будет грязно.
Вы можете легко получить результаты XML из mysql (mysql --xml), а затем написать одну (или несколько) таблиц стилей xsl-fo для данных. тогда вы можете не только создавать PDF-файлы, но также файлы PostScript или RTF-файлы с некоторыми процессорами.
XSL-FO имеет свои ограничения, но для вашей ситуации этого должно быть достаточно.
Я признаю, что кривая обучения может быть крутой, и поддержка таблиц стилей xslt может стать очень утомительной, но, как только вы начнете узнавать об этом больше, вы в конечном итоге будете писать меньше кода.
другая возможность - сделать все это, например, java или c # - отправьте операторы select и зациклите результаты, а затем итеративно создайте PDF-файл, используя такую библиотеку, как iText .