Bonjour à tous,
J'ai beau me démener depuis 2 jours, je n'arrive pas à imprimer un simple fichier texte depuis une machine AIX.
SITUATION DE DEPART :
J'avais à l'origine une classe java qui créait un fichier texte en ajoutant des caractères spéciaux en début de fichier pour que l'imprimante hp sache qu'il faut l'imprimer en paysage.
Certains de ces codes se trouvent sur http://www.dragon-it.co.uk/links/hp_pcl_codes.htm.
Une fois le fichier créé et posé dans un répertoire, la classe appelait une ligne de commande pour faire "print /D:<nom imprimante> toto.txt".
BESOIN :
Je dois faire la mm chose mais sur un serveur IBM AIX 5.3.0.0. Du coup la commande print c'est mort, on va essayer de passer par autre chose. J'ai donc utilisé l'API javax.print pour faire ca plus proprement.
J'ai donc créé la méthode ci dessous, qui scanne les imprimantes disponibles, sélectionne celle que je veux, et imprime le fichier.
RESULTATS :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 private void imprimePhysiquement(File file) throws PrinterException, InterruptedException { try { // Fichier texte tout simple file = new File("/pdata/dtxdev2/out/print/Beedon.txt"); InputStream is = new BufferedInputStream(new FileInputStream(file)); // Flavour autosense DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; PrintService service = null; PrintRequestAttributeSet pSet = new HashPrintRequestAttributeSet(); //pSet.add(OrientationRequested.LANDSCAPE) //pSet.add(MediaSizeName.ISO_A4); PrintService[] prnSvcs; // On récupère toutes les imprimantes correspondant aux critères des pSet(pour le coup absolument toutes) prnSvcs = PrintServiceLookup.lookupPrintServices(flavor, pSet); if (prnSvcs.length > 0) { int i = 0; while (i < prnSvcs.length) { // Je cherche l'imprimante qui a dans son nom imprimanteName if (StringUtils.containsIgnoreCase(prnSvcs[i].getName(), imprimanteName)) { System.out.println("Printer selected: " + prnSvcs[i].getName()); service = prnSvcs[i]; break; } i++; } } // No printer !! if (service == null) { throw new PrinterException("Printer " + imprimante + " not found !"); } DocPrintJob job = service.createPrintJob(); // DocAttributeSet das = new HashDocAttributeSet(); // das.add(MediaSizeName.ISO_A4); // das.add(OrientationRequested.LANDSCAPE); // Doc doc = new SimpleDoc(is, flavor, das); Doc doc = new SimpleDoc(is, flavor, null); // Print it // pSet.add(MediaSizeName.ISO_A4); // pSet.add(OrientationRequested.LANDSCAPE); // job.print(doc, pSet); job.print(doc, null); // It is now safe to close the input stream is.close(); } catch (PrintException e) { throw new PrinterException("Error printing file " + file.getAbsolutePath()); } catch (IOException e) { throw new PrinterException("Could not find file " + file.getAbsolutePath()); } }
Sur Windows ca marche a peu près. La page s'imprime, mais impossible de l'imprimer en paysage. Si lors de la recherche de l'imprimante je précise que je cherche des imprimantes pouvant imprimer du paysage, celle que je veux n'apparait pas.
Si je force le paysage ou le format A4 au niveau de la création du SimpleDoc ou lors de la demande d'impression, ca imprime toujours en portrait.
Si j'imprime un fichier comme j'avais a l'origine avec les caractères spéciaux en début de fichier ca marche bien.
Sur AIX c'est la cata. J'arrive absolument pas a imprimer quoi que ce soit. Mon imprimante est bien installée sur le serveur, elle est bien détectée, y'a une et une seule page qui sort mais ca ressemble a une page de garde de print job.
Ca fait un truc genre :
Ca continue avec d'autres flags, j'ai pas tout mis vous avez compris de quoi je parle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 *#########################################* TITLE : Java Printing TIME PRINTED: fri dec 12 12:00:05 2008 PRINTED AT: hp@<nom de l'imprimante> (generic) @ <nom du serveur> ***************************************** ***************************************** FLAG VALUES: a=0, d=a, f=, h=
Quelqu'un aurait une idée ?
Merci d'avance.
SuperFoieGras
Partager