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.
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 > templatePdf
(l’indentation est de 2 espaces par niveau).
optionsPdf:
templatePdf:
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 :
replace
: le PDF produit vient en remplacement du PDF produit par le processus habituel lié aux formulaires.concat
: le PDF est concaténé au PDF produit par le processus habituel.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.
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ù :
X
: distance en mm depuis le bord gauche de la pageY
: distance en mm depuis le bord supérieur de la pagetaille
: taille de la fontfont
: nom de la font (cf fpdi pour la liste des font supportées)texte de remplacement
: utile par exemple pour cocher des cases en indiquant X !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.
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ù :
'path/to/image.ext'
: est le fichier image (voir plus bas)X
: distance en mm depuis le bord gauche de la page du coin supérieur gauche de l’image.Y
: distance en mm depuis le bord supérieur de la page du coin supérieur gauche de l’image .width
: largeur de l’image en mmheight
: hauteur de l’image en mm, si non précisée alors le ratio de l’image original est utilisé pour déterminer la valeur à appliquer.type
: le type de l’image (si absent, déterminé par extension). Voir class FPDP et FPDI pour plus d’informations.Plusieurs possibilités existent pour spécifier 'path/to/image.ext'
:
templatesPdfFolder
qui sera utilisé.Article précédent
Article suivant