...
Notez que les mêmes BMP (et donc les mêmes commandes chromium/ghostscript/imagemagick) sont opérationnels pour les différentes imprimantes que nous avons utilisées lors du développement de cette fonctionnalité (evolis primacy 1, evolis primacy 2 et , zebra zxp7 et zebra ZC300),
ESUP-SGC
Les 2 configurations BMP_COMMAND_BLACK_PRINTER et BMP_COMMAND_COLOR_PRINTER dans esup-sgc (onglet admin < configuration) permettent de 'convertir' le HTML/CSS d'une carte en images BMP n&b et couleur adaptés aux imprimantes à cartes.
Dit autrement, ce sont ces 2 paramètres qui permettent à esup-sgc-client de récupérer les images BMP noir et blanc d'une part, et couleur d'autre part, qui seront envoyées à l'imprimante.
Par défaut, on propose une configuration de BMP_COMMAND_BLACK_PRINTER de ce type :
| Bloc de code | ||
|---|---|---|
| ||
wget -k --bind-address 127.0.0.1 -4 'https://esup-sgc.univ-ville.fr/wsrest/view/%s/card-b64.html?type=black' -O card-b64.html && chromium --headless --disable-gpu --print-to-pdf=card.pdf card-b64.html && gs -o card-resize.pdf -sDEVICE=pdfwrite -dPDFFitPage -g10160x6480 card.pdf && convert -monochrome card-resize.pdf card.bmp |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
wget -k -4 'https://esup-sgc.univ-rouen.fr/wsrest/view/%s/card-b64.html?type=color' -O card-b64.html && chromium --headless --disable-gpu --print-to-pdf=card.pdf card-b64.html && convert -resize 1016x648 -gravity center -extent 1016x648 -density 600 -alpha off card.pdf card.bmp |
...
Notez qu'esup-sgc s'appelle donc lui-même, via chromium et les outils ghostscript et imagemagick, on arrive ici à retrouver un BMP reprenant exactement le thème/look de la carte que l'on obtient via une impression HTML (telle que le propose esup-sgc pour permettre l'usage de tout type d'imprimante à carte).
Pour que ces commandes fonctionnent, il faut :
- installer wget, chromium, imagemagick (convert), ghostscript (commande gs)
- pour ImageMagick le format PDF ne soit pas désactivé (il faudra peut-être commenter <policy domain="coder" rights="none" pattern="PDF" /> dans /etc/ImageMagick-6/policy.xml par exemple pour ce faire)
- modifier la configuration pour renseigner l'url de votre sgc, modifier éventuellement chromium par chromium-browser suivant votre distribution
- faire en sorte que le wget sur le serveur fonctionne : il vous faudra autoriser la propre IP d'esup-sgc à appeller son propre service REST : dans security.properties, ajoutez l'IP du sgc au niveau de accessRestrictionWSRestApi - esup-sgc lui-même doit en effet pouvoir accéder à /wsrest/view/ (d'où le bind-adress ici en cohérence avec le fichier applicationContext-security.xml)
Pour tester, allez dans 'admin' < 'themes cartes', sélectionnez un thème pour lequel au moins une carte existe avec ce thème, et vérifiez que dans le bloc "Prévisualisation BMP - édition en 1 passe" vous retrouvez bien une image de la carte dédiée au ruban noir et blanc et une autre dédiée aux rubans couleur. Si ça ne fonctionne pas, regardez dans les logs pour corriger le problème (sécurité, commande non fonttionnelle à tester et mettre au point depuis /tmp, etc.). Chaque commande étant censée produire un (et un seul) fichier card.bmp
Si cela ne fonctionne pas, regardez dans les logs (apache/tomcat) les logs d'accès et /ou d'erreurs. Rejouez vous même en ligne de commande les commandes permettant de récupérer ces BMP et ajustez si nécessaire les configurations, la CSS de votre thème de carte ou même le fichier print-card-b64.jspx dédié à ce rendu.
Le fichier print-card-b64.jspx est en effet la template de carte utilisée pour cette génération de BMP. Pour ce faire il reprend la CSS du thème mais masque suivant la couleur demandée (black ou color) certains éléments de la carte.
L'objectif est d'afficher le logo et photo pour la couleur et le reste pour le noir et blanc. Si cela ne correspond pas à votre besoin, il faudra modifier print-card-b64.jspx.
Extrait de print-card-b64.jspx permettant cette dissociation du rendu black vs color (à éventuellement adapter) :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<c:if test="${type == 'black'}">
<style>
#right img {
display: none !important;
}
</style>
</c:if>
<c:if test="${type == 'color'}">
<style>
#left p,
#left img {
display: none !important;
}
</style>
</c:if> |
ESUP-SGC-CLIENT et Imprimantes
Suivant l'imprimante utilisée, la mise en oeuvre technique de la disponiblité des API pour esup-sgc-client est différente.
Imprimantes supportées
Merci de vous référer au README d'esup-sgc-client pour les détails techniques d'installation, notamment les parties spécifiques à la marque de l'imprimante souhaitée :
Théoriquement, esup-sgc-client supporte, pour l'édition en 1 passe, les imprimantes compatibles avec
- evolis print center 1 et evolis print center 2 : Primacy 1 et Primacy 2 (testés) mais aussi Elypso et Zenius (non testés)
- sdk multiplateforme link-os : ZC 300, ZC 100 (non testé), ZC350, ZXP7 e ZXP3
Pour la partie NFC, esup-sgc-client propose un outil "Test PC/SC" vous permettant de valider le bon fonctionnement de votre lecteur NFC USB sur votre Système d'Exploitation, que celui-ci soit autonome ou embarqué dans une imprimante à carte (evolis comme zebra).
Le test consiste à envoyer des commandes NFC (APDU) de manière quasi continue pendant 20 secondes. Sur une installation correcte et pleinement opérationnelle, aucune erreur PC/SC ne doit survenir. Si une seule erreur survient, votre installation ne doit pas être considérée comme opérationnelle.
Un autre test "Stress test PC/SC DES Blank Desfire" vous permet de vous assurer encore davantage de la fiabilité de votre lecteur NFC et de sa bonne installation ; pour cela et par défaut, il vous faut des cartes Desfire vierges (avec clef master-key DES à 0000000000000000 donc) pour qu'il puisse être réalisé.
Concernant le choix des imprimantes, nous avons validé l'édition en 1 passe d'esup-sgc-client sur 3 modèles d'imprimantes : Evolis Primacy 1, Evolis Primacy 2 et Zebra ZC300.
A toute fin utile, un premier tableau comparatif entre Evolis Primacy 2 et Zebra ZC300 a été élaboré suite au développement de cette édition en 1 passe.
Autres Imprimantes
esup-sgc-client a été développé de façon modulaire pour pouvoir implémenter assez facilement le support de différents types d'imprimantes pour l'édition en 1 passe (rappel : via la possibilité d'édition en 2 temps, toute imprimante à carte de toute marque est par défaut compatible avec esup-sgc).
Ainsi le support d'evolis ou zebra correspond chacun à un module maven de quelques centaines de lignes de codee java.
Développer le support d'un autre type d'imprimante correspond donc à implémenter un module maven similaire.
Le README du projet sur github donne les indications nécessaires pour monter son environnement de développement et développer dans esup-sgc-client : https://github.com/EsupPortail/esup-sgc-client
Installateur esup-sgc-client
https://esup-sgc-client-web-installer.univ-rouen.fr vous permet de générer un installateur d'esup-sgc-client (en plus d'esup-nfc-tag-server et esup-nfc-tag-desktop) en précisant uniquement les urls de vos serveur esup-sgc et esup-nfc-tag.
Les raccourcis proposés sous windows vous permettent d'avoir des lanceurs de ces outils par simple clic. Les raccourcis contiennent également au passage la surcharge de certains paramétrages par défaut : cela vous donne ainsi la possibilité de les modifier par vous-même après coup.
Ainsi si vous installez esup-sgc-client-evolis via l'installateur et que vous avez une "Evolis Primacy 1" et non une "Evolis Primacy 2" il vous faudra préciser dans le raccourci -DprinterDeviceName="Evolis Primacy" au lieu de -DprinterDeviceName="Evolis Primacy 2".
De même pour le type de ruban.
| Avertissement |
|---|
Les commandes bash résultant des configurations BMP_COMMAND_BLACK_PRINTER, BMP_COMMAND_COLOR_PRINTER et BMP_COMMAND_VIRTUAL (pour l'affichage de la carte 'dématérialisée' sur mobile par exemple) sont exécutées par esup-sgc dans un répertoire temporaire propre à chaque commande (et dont le nom de dossier est forgé via l'id de la carte, le type de conversion et le timestamp). Ainsi en utilisant des chemins relatifs pour les fichiers pdf/images intermédiaires, comme proposé dans les configurations par défaut, esup-sgc peut appeler ces commandes en parallèle pour plusieurs cartes sans risque de conflit ou d'écrasement des fichiers temporaires. Chaque commande s'exécute dans son propre environnement (dossier) isolé, garantissant que les fichiers intermédiaires générés pour une carte n'interfèrent pas avec ceux des autres processus en cours. Cela permet à esup-sgc d'optimiser le traitement des cartes tout en maintenant l'intégrité des données, même lors d'exécutions simultanées. Utiliser un chemin absolu pour les fichiers intermédiaires est à proscrire, cela pourrait entraîner des erreurs graves, comme l'impression d'une carte avec les informations d'une personne, mais attribuée à une autre. |
Pour que ces commandes fonctionnent, il faut :
- installer wget, chromium, imagemagick (convert), ghostscript (commande gs)
- pour ImageMagick le format PDF ne soit pas désactivé (il faudra peut-être commenter <policy domain="coder" rights="none" pattern="PDF" /> dans /etc/ImageMagick-6/policy.xml par exemple pour ce faire)
- modifier la configuration pour renseigner l'url de votre sgc, modifier éventuellement chromium par chromium-browser suivant votre distribution
- faire en sorte que le wget sur le serveur fonctionne : il vous faudra autoriser la propre IP d'esup-sgc à appeller son propre service REST : dans security.properties, ajoutez l'IP du sgc au niveau de accessRestrictionWSRestApi - esup-sgc lui-même doit en effet pouvoir accéder à /wsrest/view/ (d'où le bind-adress ici en cohérence avec le fichier applicationContext-security.xml)
Pour tester, allez dans 'admin' < 'themes cartes', sélectionnez un thème pour lequel au moins une carte existe avec ce thème, et vérifiez que dans le bloc "Prévisualisation BMP - édition en 1 passe" vous retrouvez bien une image de la carte dédiée au ruban noir et blanc et une autre dédiée aux rubans couleur. Si ça ne fonctionne pas, regardez dans les logs pour corriger le problème (sécurité, commande non fonttionnelle à tester et mettre au point depuis /tmp, etc.). Chaque commande étant censée produire un (et un seul) fichier card.bmp
Si cela ne fonctionne pas, regardez dans les logs (apache/tomcat) les logs d'accès et /ou d'erreurs. Rejouez vous même en ligne de commande les commandes permettant de récupérer ces BMP et ajustez si nécessaire les configurations, la CSS de votre thème de carte ou même le fichier print-card-b64.jspx dédié à ce rendu.
Le fichier print-card-b64.jspx est en effet la template de carte utilisée pour cette génération de BMP. Pour ce faire il reprend la CSS du thème mais masque suivant la couleur demandée (black ou color) certains éléments de la carte.
L'objectif est d'afficher le logo et photo pour la couleur et le reste pour le noir et blanc. Si cela ne correspond pas à votre besoin, il faudra modifier print-card-b64.jspx.
Extrait de print-card-b64.jspx permettant cette dissociation du rendu black vs color (à éventuellement adapter) :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<c:if test="${type == 'black'}">
<style>
#right img {
display: none !important;
}
</style>
</c:if>
<c:if test="${type == 'color'}">
<style>
#left p,
#left img {
display: none !important;
}
</style>
</c:if> |
ESUP-SGC-CLIENT et Imprimantes
Suivant l'imprimante utilisée, la mise en oeuvre technique de la disponiblité des API pour esup-sgc-client est différente.
Imprimantes supportées
Merci de vous référer au README d'esup-sgc-client pour les détails techniques d'installation, notamment les parties spécifiques à la marque de l'imprimante souhaitée :
Théoriquement, esup-sgc-client supporte, pour l'édition en 1 passe, les imprimantes compatibles avec
- evolis : Primacy 1 et Primacy 2 (testés) mais aussi Elyps, Zenius, ... (non testés)
- sdk multiplateforme link-os : ZC 300, ZC 100 (non testé), ZC350, ZXP7
et ZXP3
Pour la partie NFC, esup-sgc-client propose un outil "Test PC/SC" vous permettant de valider le bon fonctionnement de votre lecteur NFC USB sur votre Système d'Exploitation, que celui-ci soit autonome ou embarqué dans une imprimante à carte (evolis comme zebra).
Le test consiste à envoyer des commandes NFC (APDU) de manière quasi continue pendant 20 secondes. Sur une installation correcte et pleinement opérationnelle, aucune erreur PC/SC ne doit survenir. Si une seule erreur survient, votre installation ne doit pas être considérée comme opérationnelle.
Un autre test "Stress test PC/SC DES Blank Desfire" vous permet de vous assurer encore davantage de la fiabilité de votre lecteur NFC et de sa bonne installation ; pour cela et par défaut, il vous faut des cartes Desfire vierges (avec clef master-key DES à 0000000000000000 donc) pour qu'il puisse être réalisé.
Concernant le choix des imprimantes, nous avons validé l'édition en 1 passe d'esup-sgc-client sur 3 modèles d'imprimantes : Evolis Primacy 1, Evolis Primacy 2 et Zebra ZC300.
A toute fin utile, un premier tableau comparatif entre Evolis Primacy 2 et Zebra ZC300 a été élaboré suite au développement de cette édition en 1 passe.
Autres Imprimantes
esup-sgc-client a été développé de façon modulaire pour pouvoir implémenter assez facilement le support de différents types d'imprimantes pour l'édition en 1 passe (rappel : via la possibilité d'édition en 2 temps, toute imprimante à carte de toute marque est par défaut compatible avec esup-sgc).
Ainsi le support d'evolis ou zebra correspond chacun à un module maven de quelques centaines de lignes de codee java.
Développer le support d'un autre type d'imprimante correspond donc à implémenter un module maven similaire.
Le README du projet sur github donne les indications nécessaires pour monter son environnement de développement et développer dans esup-sgc-client : https://github.com/EsupPortail/esup-sgc-client
Installateur esup-sgc-client
https://esup-sgc-client-web-installer.univ-rouen.fr vous permet de générer un installateur d'esup-sgc-client (en plus d'esup-nfc-tag-server et esup-nfc-tag-desktop) en précisant uniquement les urls de vos serveur esup-sgc et esup-nfc-tag.
Les raccourcis proposés sous windows vous permettent d'avoir des lanceurs de ces outils par simple clic. Les raccourcis contiennent également au passage la surcharge de certains paramétrages par défaut : cela vous donne ainsi la possibilité de les modifier par vous-même après coupConcernant les imprimantes zebra, le SDK zebra sous windows semble malheureusement être compatible uniquement avec le JDK 8 d'Oracle. Pour des raisons de licence (entre autre), l'installateur d'esup-sgc-client ne propose pas ce JDK (mais un openjdk+openjfx 17 actuellement). Aussi sous windows, vous devrez utiliser un autre JDK/JRE/JavaFX que celui fourni par l'installateur ... ou alors vous dverez préférer l'usage d'esup-sgc-client et de votre imprimante zebra dpuis un linux (esup-sgc-client et la zebra ZC300 fonctionne parfaitement sous linux avec un openjdk+openjfx 17 par exemple).
Lancement d'esup-sgc-client
...
Une fois que votre esup-sgc-client est lancé, vous devez voir apparaître un bloc (en vert) en haut à droite de votre "vue manager".
Ce bloc vous permet de voir qu'effectivement votre session est liée à une imprimante en fonctionnement (bloc vert avec icône 'ok'), il vous permet aussi de "sélectionner" une autre imprimante (si vous avez le droit d'utiliser d'autres imprimantes, cf paragraphe ci-dessous concernant le "partage d'impimanteimprimante") ou encore de décider d'imprimer uniquement (sans encoder) pour revenir à la possibilité d'Édition en 2 temps d'esup-sgc (option "Aucune imprimante sélectionnée").
Si ce bloc en haut à droite a sélectionné une imprimante en fonctionnement (bloc vert - icône ok), alors un bouton "Imprimer et encoder" doit vous être proposé pour les demandes de cartes "validées" (et "éditables").
...
Si vous demandez à "Imprimer et encoder" plusieurs cartes (en même temps ou non), elles seront notés en base de donnée comme devant être éditées par votre imprilante imprimante et le seront au fur et à mesure (en série donc, telle une file d'impression).
...

