Conception d’un template d’impression PDF

Principe général

Il est impératif d’avoir déjà lu l’article "Conception d’un modèle d’impression" avant d’aborder celui-ci !

Depuis la version 5.8.0 de MedShakeEHR, il est possible de compléter/remplacer le PDF fabriqué à l’issue de la validation d’un formulaire en utilisant comme base un PDF préexistant.
Ce PDF sert de fond de page sur lequel on va venir superposer des informations textuelles ou des images en les positionnant au mm près par rapport au coin supérieur gauche de la feuille.

Ce processus utilise FPDI / FPDF.
Toutes les informations nécessaires à l’action de ces class sont à définir au niveau du formulaire qui génère le document.

Mise en œuvre

Il convient en zone de configuration d’éditer les propriétés du formulaire concerné et de se placer à l’onglet "Options".
La rédaction de ces options se fait au format yaml au niveau optionsPdf > emplatePdf (l’indentation est de 2 espaces par niveau).

optionsPdf:
 templatePdf:

Options générales

optionsPdf:
 templatePdf:
   source: '/path/to/the/PDF.pdf'
   mode: 'concat'
   defautFont: 'Arial'
   defautFontSize: 9
   defautTextColor: '0,0,0'

Les options générales sont simples et nécessitent peu de commentaires.
Une seule doit retenir l’attention, il s’agit de mode qui peut prendre 2 valeurs :

Il faut noter que le mécanisme de concaténation de PDF préformatés est ici opérationnel, quel que soit le mode choisi.

Ajout de textes

optionsPdf:
 templatePdf:
   pagesTxtMapping:
     page1:
       lastname: [20, 56]
       birthname: [42, 62]
       firstname: [25, 67]
       birthdate: [42, 73]
     page4:
       identiteCompleteTitreCourt: [39, 66, 8]
       AuteurInitial_identiteUsuelleTitre:
         - [40, 77, 8]
         - [16, 253, 6]

La définition de variables à incruster dans le document se fait page par page comme le montre l’exemple précédent.
La syntaxe générale est la suivante nomDeVariable: [X, Y, taille, couleur, font, texte de remplacement ] où :

Seuls X et Y sont indispensables. Les autres paramètres s’ils sont absents prennent les valeurs par défaut.

Comme le montre l’exemple précédent, sur une même page, on peut incruster la variable à différents endroits en répétant le bloc [X, Y, taille, couleur, font, texte de remplacement ] autant de fois que souhaité.

Si on travaille sur une variable qui peut prendre des valeurs prédéterminées comme un type select ou radio, alors on peut préciser le comportement souhaité en fonction de la valeur de la variable :

      gynObsDpniAccordCPDPN:
         oui: [146, 129, '', '', '', 'X']
         non: [166, 129, '', '', '', 'X']  
       gynObsDpniRaisonDepMarqueursMat:
         1erT:
           - [15, 142, '', '', '', 'X']
           - [98, 142, '', '', '', 'X']
         2eT:
           - [15, 142, '', '', '', 'X']
           - [129, 142, '', '', '', 'X']
       gynObsDpniGrossesseGemellaire:
         true: [15, 150.5, '', '', '', 'X']

Notez qu’il est préférable d’utiliser les clefs que les valeurs pour rédiger le yaml.
Dans l’exemple ci-dessus gynObsDpniRaisonDepMarqueursMat combine toutes les possibilités.

Ajout d’images

L’incrustation d’images fonctionne sur le même principe.

optionsPdf:
 templatePdf:
   pagesImgMapping:
     page1:
       '/path/to/templates/tampon.png': [155, 48, 45, 0, 'PNG']
       '/path/to/templates/signature.png': [168, 73, 30, 0, 'PNG']
     page4:
       '/path/to/templates/tampon.png': [60, 240, 45, 0, 'PNG']
       '/path/to/templates/signature.png': [35, 240, 30, 0, 'PNG']

Le bloc de définition d’une image est composé comme ceci 'path/to/image.ext': [X, Y, width, height, type] où :

Priorité dans les images utilisées

Plusieurs possibilités existent pour spécifier 'path/to/image.ext' :

Exemple de réalisation

Illustration - Exemple de réalisation
 

Article précédent

 

Article suivant

Mise en production initiale

LAP : mise en production