2013-02-06 3 views
0

J'ai besoin d'envoyer un document pdf pour imprimer sur le côté serveur d'une application web, l'imprimante prend en charge l'impression pdf, etc., il est également connecté au serveur. Le pdf est également stocké sur le serveur.impression sur une imprimante en réseau en utilisant java

ce que je suis en train de est sur un bouton clic, imprimer le fichier pdf, j'ai actuellement le code ci-dessous:

//Server side printing 
public class PrintDocument { 

    public void printText(String text) throws PrintException, IOException { 

     //Looks for all printers 
     //PrintService[] printServices = PrinterJob.lookupPrintServices(); 

     PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 
     InputStream is = new ByteArrayInputStream(text.getBytes("UTF8")); 
     PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
     pras.add(new Copies(1)); 

     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     Doc doc = new SimpleDoc(is, flavor, null); 
     DocPrintJob job = service.createPrintJob(); 

     PrintJobWatcher pjw = new PrintJobWatcher(job); 
     job.print(doc, pras); 
     pjw.waitForDone(); 
     is.close(); 
    } 
} 

class PrintJobWatcher { 

    boolean done = false; 

    PrintJobWatcher(DocPrintJob job) { 
     job.addPrintJobListener(new PrintJobAdapter() { 
      public void printJobCanceled(PrintJobEvent pje) { 
       allDone(); 
      } 

      public void printJobCompleted(PrintJobEvent pje) { 
       allDone(); 
      } 

      public void printJobFailed(PrintJobEvent pje) { 
       allDone(); 
      } 

      public void printJobNoMoreEvents(PrintJobEvent pje) { 
       allDone(); 
      } 

      void allDone() { 
       synchronized (PrintJobWatcher.this) { 
        done = true; 
        System.out.println("Printing has successfully completed, please collect your prints)"); 
        PrintJobWatcher.this.notify(); 
       } 
      } 
     }); 
    } 

    public synchronized void waitForDone() { 
     try { 
      while (!done) { 
       wait(); 
      } 
     } catch (InterruptedException e) { 
     } 
    } 
} 

Mais j'ai quelques questions/problèmes, comment puis-je mettre le pdf dans le flux d'entrée pour ce à imprimer, puis-je sélectionner des options telles que l'impression recto verso, et comment puis-je appeler cela de l'intérieur d'une application Web JSF

Merci

+0

Est-ce une imprimante HP? – fvu

+0

Oui c'est un 8600 pro plus –

Répondre

0

Selon this article, il devrait être possible de commencer un travail d'impression avec unBloc(le lien Wikipédia inclut des pointeurs vers la documentation de référence PJL), suivi des données PDF.

Grâce à PJL, vous devriez être en mesure de contrôler toutes les fonctionnalités de l'imprimante, y compris le duplex, etc. - l'article du blog mentionne même l'agrafage d'une impression combinée de 2 pdfs.

Assurez-vous de lire les commentaires sur l'article, il y a aussi un commentaire du type qui est listé comme inventeur sur le brevet ainsi que des informations supplémentaires sur les commandes PJL.

+0

Ok merci je vais regarder dans ce –

0

Jetez un oeil à ce blog. Nous avons dû imprimer des documents avec l'option d'impression recto-verso. Il n'est pas possible d'imprimer en recto verso directement en java. Cependant, le travail consiste à utiliser ghostscript et convertir PDF en PS (fichier Post-script). Pour cela, vous pouvez ajouter des commandes PJL ou des commandes PostScript.

Plus d'infos sur

http://reddymails.blogspot.com/2014/07/how-to-print-documents-using-java-how.html

lire également la même question

Printing with Attributes(Tray Control, Duplex, etc...) using javax.print library

+0

En outre, j'ai également trouvé ce bocaux de bfo.com qui prend en charge l'impression recto-verso en utilisant Java pur pour PDF seulement. Mais c'est COMMERCIAL. Vous devez payer. http://bfo.com/blog/2012/02/15/using_java_to_print_pdf_documents.html - Reddymails – Reddymails

Questions connexes