Весенняя Ярг Интеграция

Весенняя Ярг Интеграция

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:

image

4. Заключение

В этой статье мы показали, как легко интегрировать YARG с Spring и использовать его мощный API для простого создания документов.

В качестве ввода данных мы использовали JSON, но Groovy и SQL также поддерживаются.

Если вы хотите узнать об этом больше, вы можете найти документациюhere.

И, как всегда, вы можете найти полный примерover on GitHub.