Intégration Spring Yarg

Intégration Spring Yarg

1. Vue d'ensemble

Yet Another Report Generator (YARG) est une bibliothèque de rapports open source pour Java, développée par Haulmont. Il permet de créer des modèles dans les formats les plus courants (.doc, .docs, .xls, .xlsx, .html, .ftl, .csv) ou des formats de texte personnalisés et de les remplir avec des données chargées par SQL, Groovy ou JSON.

Dans cet article, nous allons montrer comment utiliser un Spring@RestController qui génère un document.docx avec des données chargées JSON.

2. Mise en place de l'exemple

Afin de commencer à utiliser YARG, nous devons ajouter les dépendances suivantes à nospom:


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

...

    com.haulmont.yarg
    yarg
    2.0.4

Ensuite,we need a template for our data; nous allons utiliser un simpleLetter.docx:

${Main.title}

Hello ${Main.name},

${Main.content}

Notez que YARG utilise un langage de balisage / modèle, qui permet l’insertion de contenu dans les différentes sections. Ces sections sont divisées en fonction du groupe de données auquel elles appartiennent.

Dans cet exemple, nous avons un groupe «principal» qui contient lestitle,name etcontent de la lettre.

These groups are called ReportBand dans YARG et ils sont très utiles pour séparer les différents types de données que vous pouvez avoir.

3. Intégration de Spring avec YARG

L’un des meilleurs moyens d’utiliser un générateur de rapports consiste à créer un service capable de nous renvoyer le document.

Et donc, nous utiliserons Spring et implémenterons un simple@RestController qui sera chargé de lire le modèle, d'obtenir le JSON, de le charger dans le document et de renvoyer un.docx. formaté

Commençons par créer unDocumentController:

@RestController
public class DocumentController {

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

Cela exposera la création du document en tant que service.

Nous allons maintenant ajouter la logique de chargement pour le modèle:

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

La classeReportBuilder sera responsable de la création du rapport, regroupant le modèle et les données. ReportTemplateBuilder charge notre modèleLetter.docx __ précédemment défini en spécifiant le chemin, le nom et le type de sortie du document.

Ensuite, nous passeronsadd the loaded template au générateur de rapports.

Nous devons maintenant définir les données qui vont être insérées dans le document, ce sera un fichierData.json avec les éléments suivants:

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

Il s'agit d'une structure JSON simple avec un objet «principal» contenant le titre, le nom et le contenu requis par notre modèle.

Maintenant, continuons à charger les données dans nosReportBuilder:

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

Ici, nous définissons unBandBuilder afin de créer unReportBand, qui est l'abstraction que YARG utilise pour les groupes de données que nous avons définis précédemment dans le document modèle.

Nous pouvons voir que nous définissonsthe name with the exact same section «Main», puis nous utilisons une méthode de requête pour trouver la section «Main» et déclarer un paramètre qui sera utilisé pour trouver les données nécessaires pour remplir le modèle.

Il est important de noter que YARG utiliseJsonPath pour parcourir le JSON, c'est pourquoi nous voyons cette syntaxe «$ .main».

Ensuite, spécifions dans la requête que le format des données est «json», puis ajoutons la bande au rapportand finally, build it.

La dernière étape consiste à définir l'objetReporting, qui est chargé d'insérer les données dans le modèle et de générer le document final:

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

Nous utilisons unDefaultFormatterFactory qui prend en charge les formats courants répertoriés au début de l'article. Après cela, nous définissons lesJsonDataLoader qui seront responsables de l'analyse du JSON.

Dans la dernière étape, nous définissons le type de contenu approprié pour le format .docx et exécutons le rapport. Cela connectera les données JSON et les insérera dans le modèle en sortie du résultat dans le flux de sortie de la réponse.

Nous pouvons maintenant accéder à l'URL de/generate/doc pour télécharger le document et nous verrons le résultat suivant dans notre .docx généré:

image

4. Conclusion

Dans cet article, nous avons montré comment intégrer facilement YARG à Spring et utiliser sa puissante API pour créer des documents de manière simple.

Nous avons utilisé JSON comme entrée de données, mais Groovy et SQL sont également pris en charge.

Si vous voulez en savoir plus, vous pouvez trouver la documentationhere.

Et comme toujours, vous pouvez trouver l'exemple completover on GitHub.