Génération de PDF

Ce module vous permettra de générer des PDF à partir de templates HTML

    Avant de commencer

    Avant de démarrer ce module, il est nécessaire d’avoir suivi le module Concevoir mon premier processus afin d’avoir le processus Document_Validation associé.

    Dans ce module, nous allons utiliser le template HTML document_rejected suivant :


    Template document_rejected

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
      <head>
        <script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.0/dropzone.min.js">
        </script>
        <link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.0/dropzone.min.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" language="javascript" src="../../../scripts/vendor.min.js">
        </script>
        <script type="text/javascript" language="javascript" src="../../../scripts/jquery.scrollbar.js">
        </script>
        <script type="text/javascript" language="javascript" src="../../../scripts/flower.js?v=${project.version}">
        </script>
        <script type="text/javascript" language="javascript" src="../../../flowergwt/flowergwt.nocache.js?v=${project.version}">
        </script>
        <link href="../../../css/bootstrap.min.css?v=4.1.3" rel="stylesheet" type="text/css" />
        <link href="../../../css/style.css" rel="stylesheet" type="text/css" />
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="format-detection" content="date=no" />
        <meta name="format-detection" content="address=no" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="x-apple-disable-message-reformatting" />
        <title>
          Flower - Document rejected
        </title>
        <style type="text/css" media="screen">
          @import url('https://fonts.googleapis.com/css?family=Barlow+Condensed|Quicksand&display=swap')
          /* Linked Styles */
          h2 {
          text-align: center;
          }
        </style>
      </head>
      <body class="authentication-bg authentication-bg-pattern">
        <h2 class="text-center">
          Demande de validation rejetée
        </h2>
        <br/>
        <p class="text-muted font-14 mt-2">
          Bonjour 
          <br/>
          Le document a malheureusement été rejeté le  
          <b th:text="${component.getData().getLastUpdateDate()}">
          </b>
        </p>
      </body>
    </html>

    Génération du fichier

    Les templates HTML permettent de générer des fichiers HTML complexes. Les variables d’un processus peuvent être utilisées, durant la génération, pour valoriser ou conditionner des zones textuelles du fichier.


    Reprenez votre processus Document_Validation. Dans l’onglet Diagramme :

    • Ajoutez une Service Task entre le Gateway et l’End event rejeté et nommez là Generate HTML file
    • Utilisez l’Element Template Generate file
    • Valorisez les champs suivants :
      • Template : document-rejected
      • Generated file name : rejected
      • Result Variable : tempFileId


    Lors de cette étape, à partir du template, un fichier HTML temporaire sera créé avec les variables résolues. Ce fichier sera stocké dans la variable Camunda nommée tempFileId.

    Conversion en PDF

    Afin de convertir le fichier HTML généré à partir du template, nous allons utiliser le JavaDelegate permettant de convertir un fichier en PDF :

    • Ajoutez une Service Task et nommez la Convert file
    • Sélectionnez l’Element Template Convert temporary file
    • Valorisez les champs suivants :
      • File ID : ${tempFileId.getValue()} indiquant le fichier HTML temporaire à convertir
      • Output : tempFileId


    Lors de cette étape, le fichier HTML sera converti en PDF. La variable Camunda tempFileId contient maintenant l’identifiant du fichier PDF.

    Gestion des erreurs

    Lors de la conversion en PDF, des erreurs peuvent survenir en raison de problématiques techniques, de fichier invalide ou de format non supporté. Ces erreurs bloquent la suite de votre processus. Il est donc nécessaire de gérer ces erreurs en ajoutant un Error Boundary Event sur la tâche Convert file :

    • Cliquez sur la tâche Convert file
    • Ajoutez un Boundary Event
    • Glissez-le sur le bord de la tâche
    • Changez le type de l’event (en cliquant sur la clé) pour avoir un Error Boundary Event


    Cet Error Boundary Event va permettre d’intercepter une éventuelle erreur. Dans notre cas, nous allons juste continuer notre processus à l’apparition de l’erreur.
    N’oubliez pas de lier l’Error Boundary Event à la suite du processus !

    Création du document

    Au sein du sous-processus, ajoutez une Script Task nommée Create document avec le script au format JavaScript suivant :

    Création d'un document avec fichier PDF

    var builder = com.flower.docs.common.component.ComponentBuilder; 
    var DocumentFile = com.flower.docs.domain.file.DocumentFile;
    var Category = com.flower.docs.domain.component.Category;
    var data = builder.component(Category.fromValue(category)).name(name).classId(classid).build();
    var file = new DocumentFile();
    file.setId(tempFileId);
    data.getFiles().add(file);
    data
    

    Ce script permet la création de composants avec un fichier dont l’identifiant est celui de notre fichier PDF stocké dans la variable Camunda tempFileId.


    Ajoutez la valeur data au champ Result variable, permettant de stocker le document dans une variable Camunda pour être, par la suite, sauvegardé dans FlowerDocs.


    Enfin, renseignez les champs suivants avec les valeurs indiquées :

    • category : DOCUMENT
    • name : Document rejeté
    • classid : Document

    Sauvegarde du document

    Le composant est pour le moment uniquement stocké dans la variable Camunda data. Il faut donc créer le document dans FlowerDocs. Pour cela, FlowerDocs met à disposition un JavaDelegate. Toujours dans le sous-processus :

    • Ajoutez une Service Task nommée Save document
    • Selectionnez l’Element Template Save component
    • Valorisez le champ Component avec ${data}


    Le sous-processus étant terminé, reliez-le à l’End Event rejeté afin qu’il ressemble à :

    Processus final avec conversion en PDF
    Processus final avec conversion en PDF


    Félicitations, votre processus est entièrement modélisé ! N’oubliez pas de le sauvegarder !

    Déclenchement du processus

    Comme pour le module Concevoir mon premier processus, créez une tâche de classe Start afin de déclencher le processus Document_Validation. Rejetez ensuite le document afin d’activer la branche rejeté du processus et ainsi créer le document avec pour contenu le fichier PDF généré.

    Résultat

    Vous pouvez maintenant effectuer une recherche de document avec pour nom de document à rechercher : Document rejeté.

    Ouvrez le document en question et vous verrez apparaître le document PDF généré à partir du template.