Bonjour,
Je souhaite mettre en place dans une application l'impression automatique d'étiquettes sur une imprimante thermique Zebra.
J'aimerais utiliser une applet.
J'ai développé l'applet sans trop de problème (il s'uffit d'envoyer un flux directement à l'imprimante ou sur le port) et elle fonctionne plutôt pas mal en local par contre impossible de lancer l'impression depuis la page web.
J'ai auto-signé mon applet, elle se lance correctement.
Après avoir mis des sysout et autres printStackTrace un peu partout, je ne rencontre pas d'erreur lors de l'exécution.
Je vois même le job l'impression apparaitre dans la file d'attente de mon imprimante (sous Windows), mon problème est que celui-ci passe direct en "suppression" et mon impression n'est pas lancée.
Ça ressemble à un problème de sécurité au niveau Windows mais je ne vois pas comment le contourner... Si quelqu'un a une solution pour ça, ça m'aiderait bien.
Le code d'impression ressemble à ça :
J'utilise un JNLP généré par une servlet pour lancer mon applet qui ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public boolean printOnPrinter(String printerName) { PrintService printer = null; System.out.println("Recherche de l'imprimante " + printerName); PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null); for (int i = 0; i < services.length ; i++) { if (printerName.equals(services[i].getName())) { printer = services[i]; System.out.println("Imprimante " + printerName + " trouvée"); break; } } if (printer == null) { System.err.println("L'imprimante (" + printerName + ") n'a pas été trouvée"); return false; } System.out.println("Création du job d'impression"); DocPrintJob job = printer.createPrintJob(); byte[] by = stream.getBytes(); DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE; Doc doc = new SimpleDoc(by, flavor, null); try { System.out.println("Début de l'impression"); job.print(doc, null); } catch (PrintException e) { System.err.println("Une erreur s'est produite pendant l'impression"); e.printStackTrace(); return false; } System.out.println("Impression terminée"); return true; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?xml version="1.0" encoding="UTF-8"?> <jnlp codebase="http://localhost:8080/myapp" spec="1.5+"> <information> <title>PrintApplet</title> <vendor>MonEntrepiuse</vendor> <homepage href="http://www.monentreprise.fr"/> <description>...</description> </information> <resources> <j2se href="http://java.sun.com/products/autodl/j2se" version="1.5+"/> <jar href="lib/printApplet-signee.jar" main="true"/> <jar href="lib/libutile-signee.jar"/> </resources> <applet-desc documentbase="http://localhost:8080/myapp/lib" height="30" main-class="main.Main" name="PrintApplet" width="200"> <param name="gou" value="... objet sérializé et encodé en base64 ..."/> </applet-desc> <security> <all-permissions/> </security> </jnlp>
Partager