Arborescence des pages

L'édition en 1 passe est rendue possible au travers d'esup-sgc-client notamment par le fait que :

  • esup-nfc-tag calcule pour esup-sgc-client les commandes NFC (APDU) visant à écrire les applications MIFARE Desfire ; ce fonctionnement est proposé ainsi depuis la première version d'esup-sgc (2017)
  • esup-sgc construit pour esup-sgc-client les images BMP des rendus de carte noir et blanc d'une part, et couleur d'autre part à destination des imprimantes à carte ; cette possibilité est disponible depuis la version 2 d'esup-sgc (février 2023).

Par rapport à l'édition en 2 temps, c'est cette possibilité de rendu en BMP que l'on doit configurer/paramétrer pour supporter l'édition en 1 passe dans esup-sgc.

Ce rendu est réalisé en s'appuyant sur le fonctionnement natif d'esup-sgc quand au rendu de la carte, à savoir un rendu HTML dont le thème de la carte est implémenté par une feuille de style (CSS) dédiée à l'impression depuis un navigateur web.
Afin de conserver cette facilité de mise en oeuvre d'un thème de carte, le rendu en BMP s'appuie sur l'interprétation de ce même HTML/CSS côté serveur via l'appel en ligne de commande du navigateur chromium qui a la capacité d'interpréter et 'imprimer' un HTML/CSS en format PDF.
Puis avec une suite d'instructions complémentaires s'appuyant sur ghostscript et imagemagick, esup-sgc est finalement en capacité de proposer à esup-sgc-client des BMP spécifiques et adaptés aux API propriétaires des imprimantes evolis et zebra.

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 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 : 

wget --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

Aussi BMP_COMMAND_COLOR_PRINTER pourra être de la forme suivante : 

wget -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) : 

   <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 coup.

Concernant 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 devrez préférer l'usage d'esup-sgc-client et de votre imprimante zebra depuis 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

Pour permettre à esup-sgc-client de piloter votre imprimante et de lui faire éditer une carte (impression + enocdage), et après avoir installé et configuré esup-sgc-client, vous devez : 

  • le lancer (en choisissant le esup-sgc-client adapté / supportant votre imprimante)
  • vous authentifier sur le panneau de gauche
  • sélectionner la salle d'encodage dans le panneau de gauche
  • sélectionner "Impression et encodage via imprimante ..."
  • cliquer sur start

Édition effective des cartes

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'imprimante") 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").

Dès que vous cliquez sur le bouton "Imprimer et encoder", votre esup-sgc-client édite la carte de façon simultanée.

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 imprimante et le seront au fur et à mesure (en série donc, telle une file d'impression). 

Ainsi, le déclenchement d'une édition de carte(s) ne requiert finalement qu'un simple navigateur web !

Il est donc possible de déclencher une impression à distance depuis un téléphone ou une tablette par exemple !

Partage d'imprimante

Le fonctionnement d'une imprimante à carte avec lecteur NFC USB implique que l'imprimante est reliée en USB au PC faisant tourner esup-sgc-client.

Par rapport à l'édition en 2 temps, l'édition en 1 passe ne permet donc pas d'utiliser des imprimantes connectées et/ou partagées simplement en réseau.

esup-sgc propose une fonctionnalité avancée permettant de partager malgré tout une imprimante : lorsque vous connectez un esup-sgc-client sur un esup-sgc, et après authentification, l'imprimante est enregistrée dans esup-sgc et vous la retrouvez dans 'admin < imprimantes' ans esup-sgc. À ce niveau vous pouvez "éditer" l'imprimante pour la partager avec un ou plusieurs eppn et un ou plusieurs groupes ldap. Vous pouvez également modifier le label de l'imprimante.

Vous pouvez ainsi imaginer utiliser un compte générique au niveau d'une structure pour vous connecter sur esup-sgc-client et piloter l'imprimante qui sera utilisable et commandable par un ensemble de personnels pour lancer des impressions depuis leur navigateur. 


Vidéos de démonstration

2 vidéos de démonstration de cette édition en 1 passe sont proposées : 

  • Une utilisant une imprimante Evolis Primacy depuis un windows : 

  • Une utilisant une imprimante Zebra ZC300 depuis un linux/debian : 


  • Aucune étiquette