Весенняя Ярг Интеграция
1. обзор
Еще один генератор отчетов (YARG) - это библиотека отчетов для Java с открытым исходным кодом, разработанная компанией Haulmont. Он позволяет создавать шаблоны в наиболее распространенных форматах (.doc, .docs, .xls, .xlsx, .html, .ftl, .csv) или пользовательских текстовых форматах и заполнять их данными, загруженными с помощью SQL, Groovy или JSON.
В этой статье мы собираемся продемонстрировать, как использовать Spring@RestController, который выводит документ.docx с данными, загруженными в формате JSON.
2. Настройка примера
Чтобы начать использовать YARG, нам нужно добавить следующие зависимости к нашемуpom:
false
bintray-cuba-platform-main
bintray
http://dl.bintray.com/cuba-platform/main
...
com.haulmont.yarg
yarg
2.0.4
Далееwe need a template for our data; мы собираемся использовать простойLetter.docx:
${Main.title}
Hello ${Main.name},
${Main.content}
Обратите внимание, как YARG использует язык разметки / шаблонов, который позволяет вставлять контент в различные разделы. Эти разделы разделены по группам данных, к которым они принадлежат.
В этом примере у нас есть «Основная» группа, которая содержитtitle,name иcontent буквы.
These groups are called ReportBand в YARG, и они очень полезны для разделения различных типов данных, которые у вас могут быть.
3. Интеграция пружины с YARG
Одним из лучших способов использования генератора отчетов является создание службы, которая может вернуть нам документ.
Итак, мы будем использовать Spring и реализовать простой@RestController, который будет отвечать за чтение шаблона, получение JSON, загрузку его в документ и возврат отформатированного.docx.
Сначала создадимDocumentController:
@RestController
public class DocumentController {
@GetMapping("/generate/doc")
public void generateDocument(HttpServletResponse response)
throws IOException {
}
}
Это выставит создание документа как сервис.
Теперь добавим логику загрузки для шаблона:
ReportBuilder reportBuilder = new ReportBuilder();
ReportTemplateBuilder reportTemplateBuilder = new ReportTemplateBuilder()
.documentPath("./src/main/resources/Letter.docx")
.documentName("Letter.docx")
.outputType(ReportOutputType.docx)
.readFileFromPath();
reportBuilder.template(reportTemplateBuilder.build());
КлассReportBuilder будет отвечать за создание отчета, группировку шаблона и данных. ReportTemplateBuilder загружает наш ранее определенный шаблонLetter.docx __, указывая путь, имя и тип вывода документа.
Затем мы передадимadd the loaded template конструктору отчетов.
Теперь нам нужно определить данные, которые будут вставлены в документ, это будет файлData.json со следующим:
{
"main": {
"title" : "INTRODUCTION TO YARG",
"name" : "example",
"content" : "This is the content of the letter, can be anything we like."
}
}
Это простая структура JSON с «основным» объектом, содержащим заголовок, имя и контент, которые нужны нашему шаблону.
Теперь продолжим загружать данные в нашReportBuilder:
BandBuilder bandBuilder = new BandBuilder();
String json = FileUtils.readFileToString(
new File("./src/main/resources/Data.json"));
ReportBand main = bandBuilder.name("Main")
.query("Main", "parameter=param1 $.main", "json")
.build();
reportBuilder.band(main);
Report report = reportBuilder.build();
Здесь мы определяемBandBuilder, чтобы создатьReportBand, который является абстракцией, которую YARG использует для групп данных, которые мы определили ранее в документе шаблона.
Мы видим, что мы определяемthe name with the exact same section «Main», затем мы используем метод запроса для поиска раздела «Main» и объявляем параметр, который будет использоваться для поиска данных, необходимых для заполнения шаблона.
Важно отметить, что YARG используетJsonPath для обхода JSON, поэтому мы видим этот синтаксис «$ .main».
Затем давайте укажем в запросе, что формат данных - «json», затем добавим бэнд в отчетand finally, build it.
Последний шаг - определить объектReporting, который отвечает за вставку данных в шаблон и создание окончательного документа:
Reporting reporting = new Reporting();
reporting.setFormatterFactory(new DefaultFormatterFactory());
reporting.setLoaderFactory(
new DefaultLoaderFactory().setJsonDataLoader(new JsonDataLoader()));
response.setContentType(
"application/vnd.openxmlformats-officedocument.wordprocessingml.document");
reporting.runReport(
new RunParams(report).param("param1", json),
response.getOutputStream());
Мы используемDefaultFormatterFactory, который поддерживает распространенные форматы, перечисленные в начале статьи. После этого мы устанавливаемJsonDataLoader, который будет отвечать за разбор JSON.
На последнем шаге мы устанавливаем соответствующий тип содержимого для формата .docx и запускаем отчет. Это соединит данные JSON и вставит их в шаблон, выводя результат в поток вывода ответа.
Теперь мы можем получить доступ к URL-адресу/generate/doc для загрузки документа, и мы увидим следующий результат в нашем сгенерированном .docx:
4. Заключение
В этой статье мы показали, как легко интегрировать YARG с Spring и использовать его мощный API для простого создания документов.
В качестве ввода данных мы использовали JSON, но Groovy и SQL также поддерживаются.
Если вы хотите узнать об этом больше, вы можете найти документациюhere.
И, как всегда, вы можете найти полный примерover on GitHub.