Вам нужна библиотека, чтобы справиться с этим. Primefaces по своей сути не знает, как отображать ваши данные (он анализирует столбцы, а затем экспортирует на основе этого), поэтому вам нужно дать ему несколько советов. Короткий ответ заключается в том, что вы можете легко создать таблицу либо программно, путем отражения на DTO и привязки ее к странице, либо создав простую таблицу данных и установив для нее стиль «display: none», а затем используя экспортер.
В качестве альтернативы вы можете взглянуть на набор отчетов, такой как JasperReports, который обрабатывает «печать» в вышеуказанных форматах, но, опять же, вам нужно что-то сделать, чтобы интерпретировать его. Если вас не волнует производительность, в JSON-Lib есть очень хороший метод "toXML", который преобразует DTO в xml, который затем можно легко экспортировать в любой из форматов, которые вы выберете.
По сути, вы смотрите на ~ 1 час работы, если это сложный набор DTO, или 10 минут, если это не так - до тех пор, пока пропускная способность не является проблемой, это должно быть абсолютно безболезненно.