В одном из своих проектов мне понадобилось автоматизированно формировать документы договоров для клиентов. Договор представляет собой юридический документ длиной около 10 страниц и является шаблоном: в нужных местах подставляются данные конкретного клиента.
Задача
Первичные требования были такими:
В сложном стилизованном документе doc или docx вывести нужную информацию в помеченных местах.
В дальнейшем они были уточнены и расширены:
- В сложном стилизованном документе docx вывести данные в помеченных местах.
- Разметка вывода данных должна быть похожа на скриптлеты:
${}, <%%>, <%=%>
. - Данными для вывода могут быть объект. Нужна возможность обращения к полям.
- Для вывода использовать один из скриптовых языков: Groovy, JavaScript.
- Нужно иметь возможность выводить списки объектов в таблицы, в каждой ячейке отображая поля.
Имеющиеся решения
Оказалось, что имеющиеся в области продукты (я говорю про платформу Java), не решают поставленную задачу. Ниже краткий обзор продуктов:
Jasper reports
В качестве шаблона использует файл xml-разметки *.jrxml. Файл разметки документа + данные (как из БД, так и Map параметров) отдаются процессору, который формирует любой из следующих форматов: PDF, XML, HTML, CSV, XLS, RTF, TXT.
Не устроило:
- Это не WYSIWYG, даже при наличии iReport — визуального средства формирования jrxml-файлов.
- Надо хорошо изучить JasperReports API, чтобы создать и стилизовать сложный шаблон.
- Не выводит в нужном формате. Можно и PDF, но хотелось бы иметь возможность потом поредактировать выходной документ.