Spring Yarg Integration

Spring Yarg Integration

1. Überblick

Ein weiterer Report Generator (YARG) ist eine von Haulmont entwickelte Open-Source-Berichtsbibliothek für Java. Es ermöglicht das Erstellen von Vorlagen in den meisten gängigen Formaten (.doc, .docs, .xls, .xlsx, .html, .ftl, .csv) oder benutzerdefinierten Textformaten und das Füllen mit Daten, die von SQL, Groovy oder JSON geladen wurden.

In diesem Artikel wird gezeigt, wie ein Spring@RestControllerverwendet wird, der ein.docx-Dokument mit JSON-geladenen Daten ausgibt.

2. Einrichten des Beispiels

Um YARG verwenden zu können, müssen wir unserenpom: die folgenden Abhängigkeiten hinzufügen


    
        
            false
        
        bintray-cuba-platform-main
        bintray
        http://dl.bintray.com/cuba-platform/main
    

...

    com.haulmont.yarg
    yarg
    2.0.4

Als nächsteswe need a template for our data; Wir werden ein einfachesLetter.docx verwenden:

${Main.title}

Hello ${Main.name},

${Main.content}

Beachten Sie, dass YARG eine Markup- / Templating-Sprache verwendet, mit der Inhalte in die verschiedenen Abschnitte eingefügt werden können. Diese Abschnitte sind nach der Datengruppe unterteilt, zu der sie gehören.

In diesem Beispiel haben wir eine "Haupt" -Gruppe, die dietitle,name undcontent des Buchstabens enthält.

These groups are called ReportBand in YARG und sie sind sehr nützlich, um die verschiedenen Datentypen zu trennen, die Sie haben können.

3. Frühling mit YARG integrieren

Eine der besten Möglichkeiten, einen Berichtsgenerator zu verwenden, besteht darin, einen Dienst zu erstellen, der das Dokument an uns zurücksenden kann.

Daher verwenden wir Spring und implementieren ein einfaches@RestController, das für das Lesen der Vorlage, das Abrufen des JSON, das Laden in das Dokument und das Zurückgeben eines formatierten.docx. verantwortlich ist

Erstellen wir zunächst einDocumentController:

@RestController
public class DocumentController {

    @GetMapping("/generate/doc")
    public void generateDocument(HttpServletResponse response)
      throws IOException {
    }
}

Dadurch wird die Erstellung des Dokuments als Dienst verfügbar gemacht.

Nun fügen wir die Ladelogik für die Vorlage hinzu:

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());

Die KlasseReportBuilderist für die Erstellung des Berichts verantwortlich und gruppiert die Vorlage und die Daten. ReportTemplateBuilder lädt unsere zuvor definierte VorlageLetter.docx __ durch Angabe von Pfad, Name und Ausgabetyp des Dokuments.

Dann werden wiradd the loaded template an den Berichts-Generator senden.

Jetzt müssen wir die Daten definieren, die in das Dokument eingefügt werden sollen. Dies ist eineData.json-Datei mit den folgenden Angaben:

{
    "main": {
        "title" : "INTRODUCTION TO YARG",
        "name" : "example",
        "content" : "This is the content of the letter, can be anything we like."
    }
}

Dies ist eine einfache JSON-Struktur mit einem „Haupt“ -Objekt, das den Titel, den Namen und den Inhalt enthält, den unsere Vorlage benötigt.

Laden wir nun die Daten weiter in unsereReportBuilder:

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();

Hier definieren wir einBandBuilder, um einReportBand zu erstellen. Dies ist die Abstraktion, die YARG für die Datengruppen verwendet, die wir zuvor im Vorlagendokument definiert haben.

Wir können sehen, dass wirthe name with the exact same section "Main" definieren, dann verwenden wir eine Abfragemethode, um den Abschnitt "Main" zu finden und einen Parameter zu deklarieren, der verwendet wird, um die Daten zu finden, die zum Füllen der Vorlage erforderlich sind.

Es ist wichtig zu beachten, dass YARGJsonPath verwendet, um den JSON zu durchlaufen, weshalb wir diese "$ .main" -Syntax sehen.

Als Nächstes geben wir in der Abfrage an, dass das Format der Daten "json" ist, und fügen dann das Band zum Berichtand finally, build it hinzu.

Der letzte Schritt besteht darin, dasReporting-Objekt zu definieren, das für das Einfügen der Daten in die Vorlage und das Generieren des endgültigen Dokuments verantwortlich ist:

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());

Wir verwenden einDefaultFormatterFactory, das die am Anfang des Artikels aufgeführten allgemeinen Formate unterstützt. Danach legen wir dieJsonDataLoader fest, die für das Parsen des JSON verantwortlich sind.

Im letzten Schritt legen wir den entsprechenden Inhaltstyp für das DOCX-Format fest und führen den Bericht aus. Dadurch werden die JSON-Daten verkabelt und in die Vorlage eingefügt, wobei das Ergebnis in den Antwortausgabestream ausgegeben wird.

Jetzt können wir auf die URL von/generate/doczugreifen, um das Dokument herunterzuladen, und wir werden das folgende Ergebnis in unserer generierten .docx sehen:

image

4. Fazit

In diesem Artikel haben wir gezeigt, wie wir YARG einfach in Spring integrieren und mithilfe der leistungsstarken API Dokumente auf einfache Weise erstellen können.

Wir haben JSON als Dateneingabe verwendet, aber Groovy und SQL werden auch unterstützt.

Wenn Sie mehr darüber erfahren möchten, finden Sie die Dokumentationhere.

Und wie immer finden Sie das vollständige Beispielover on GitHub.