2016-09-08 1 views
1

Je développe le module de facturation dans mon application en Java (framework Struts2). Après la soumission réussie du formulaire de facture, mon code génère le PDF de la facture. Ce que je veux mettre en œuvre est, sur la soumission de formulaire de facture réussie et sur la génération de PDF réussie, le PDF généré devrait imprimer à partir de l'imprimante. J'ai écrit le code pour l'impression PDF, mais le problème ici est, par ce code, il est seulement possible d'imprimer le fichier PDF à partir de la même machine où l'application est déployée et l'imprimante est connectée. Mais cela ne va pas être l'architecture après la fin de l'application. Il y aura une architecture client-serveur, où mon application sera déployée sur un serveur et de nombreux clients utiliseront cette application à partir de leurs machines respectives.Java code imprimer le fichier PDF de la machine cliente

Donc le problème ici est, chaque autre machine est connectée à différentes imprimantes et par mon code actuel, il est seulement possible d'imprimer le PDF à partir de l'endroit où l'application est déployée, dans ce cas, le serveur.

Maintenant, ma question est ici:

  1. Est-il possible d'obtenir une impression de PDF, dans un tel scénario, en utilisant Java, je veux dire, l'impression PDF à partir de l'imprimante qui est connectée à la machine cliente respective?

  2. Si oui, comment ferais-je cela?

Voici mon extrait de code:

import java.io.FileInputStream; 
import javax.print.Doc; 
import javax.print.DocFlavor; 
import javax.print.DocPrintJob; 
import javax.print.PrintService; 
import javax.print.PrintServiceLookup; 
import javax.print.SimpleDoc; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 
import javax.print.attribute.standard.Copies; 
import javax.print.attribute.standard.Sides; 

public class PDFPrintDemo { 

    public static void main(String[] args) { 
     try { 

      System.out.println("Printing PDF demo using JAVA."); 

      DocFlavor docFlavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE; 

     PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet(); 

     attributeSet.add(Sides.ONE_SIDED); 
     attributeSet.add(new Copies(2)); 

     PrintService[] printServices = PrintServiceLookup 
       .lookupPrintServices(docFlavor, attributeSet); 

     if (printServices.length == 0) { 
      System.out.println("No printer found..."); 
     } 

     PrintService myService = null; 

     for (PrintService service : printServices) { 
      System.out.println("Connected printer name is :: " 
        + service.getName()); 
      if (service.getName().equals(
        "Hewlett-Packard-HP-LaserJet-Pro-MFP-M126nw")) { 

       myService = service; 

       break; 

      } 
     } 

     FileInputStream inputStream = new FileInputStream(
       "/home/roshan/Downloads/rudhiraBillDemo.pdf"); 

     Doc pdfDoc = new SimpleDoc(inputStream, 
       DocFlavor.INPUT_STREAM.AUTOSENSE, null); 

     DocPrintJob printJob = myService.createPrintJob(); 

     printJob.print(pdfDoc, attributeSet); 

     inputStream.close(); 

     System.out.println("PDF printed successfully.."); 

    } catch (Exception exception) { 
     exception.printStackTrace(); 
    } 
} 

} 

Répondre

0

Je suppose que vous votre projet final est un site web où les clients veulent télécharger et imprimer un fichier PDF.

Si ma supposition est vraie alors votre réponse est non! Les clients peuvent download mais vous ne pouvez pas le forcer à être printed!

Vous pouvez écrire un struts action qui renvoie un fichier PDF (le même que vous avez fait ci-dessus), mais (en raison de problèmes de sécurité) il n'y a aucun moyen que vous pouvez développer tout code html+javascript qui envoient le fichier PDF généré à l'imprimante client. Comme vous le savez, il existe d'autres limitations dans html+javascript, par exemple vous ne pouvez pas accéder à la caméra ou au microphone du client.

Si vous le souhaitez, vous devez utiliser Java Applet, Flash Player ou ActiveX (Windows uniquement). Ces technologies peuvent accéder à n'importe quel périphérique sur la machine client.

+0

Merci. Donc, si je veux y arriver, comment puis-je faire cela en utilisant Java Applet? Je veux dire est-il possible de migrer cela dans mon cadre Struts2? –

+0

Vous avez besoin d'une applet qui lit une donnée depuis un 'url' et l'imprime, que' url' pourrait être une action struts. Ici pourrait être une solution de haut niveau, écrire une applet qui peut accéder à l'imprimante et imprimer, créer une action struts qui sort un fichier pdf, appelez l'action struts (ouvrir l'url) obtenir le fichier PDF l'envoyer à l'imprimante –