Возможно, вы можете использовать элемент управления Report Viewer в серверном процессе, написанном в управляемом коде. Вы передаете элемент управления источнику данных (который может быть объектом памяти DataTable), и он вернет поток байтов, который вы можете направить в файл.
Элемент управления имеет пользовательский интерфейс, но его можно обойти.