Добрый день!
Если на сервере установлен MS Office, то установлены и библиотеки для работы с ним (Excel.Interop, Word.Interop и т.д.)
Алгоритм следующий:
1) Заполняется форма на стороне клиента и данные отправляются на сервер;
2) На сервере создается экземпляр документа Word, в него заносится информация из шаблона и заполняется данными из формы;
3) Получившийся файл Word НЕ сохраняется на сервере, а передается обратно клиенту в потоке, в котором, опять же, указываем через что его следует открывать на стороне клиента.
Если же нет MS Office на сервере, то можно его самому собрать, т.к. .docx есть ни что иное, как набор упорядоченных xml-файлов. Можете свой шаблон открыть через архиватор и убедиться в этом, а уж если покопаться во внутренностях этих файлов, то можно найти какие данные в xml нужно поменять.
Алгоритм:
1) Получаем данные с формы;
2) Копируем шаблон через архиватор (7zip, например), открываем необходимые xml-файлы и подменяем в них информацию на необходимую;
3) выгружаем файл в поток, не забыв уничтожить измененную копию шаблона (ну или почистить память, если вы физически нигде ничего не сохраняли);
4) передаем поток клиенту.