2012-04-27 15 views
5

Sto utilizzando il codice java mostrato di seguito per stampare un file di testo su una stampante HP DeskJet1000 USB collegata al mio computer. Ogni volta che eseguo questo codice viene inviato un lavoro di stampa, ma la stampante non stampa nulla. Lo stato indica che la stampante sta stampando ma non assorbe neanche una pagina. Per favore aiuto! Segue il mio codice:codice java printing non funziona

package printing; 

import java.io.FileInputStream; 
import javax.print.*; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 

/** @author Majid */ 
public class Printing { 
    public static void main (String [] args) { 
     // TODO code application logic here 
     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
     /* locate a print service that can handle it */ 
     PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset); 
     /* create a print job for the chosen service */ 
     int printnbr = 0; 
     DocPrintJob pj = pservices [printnbr].createPrintJob(); 
     try { 
      FileInputStream fis = new FileInputStream ("e:/fypdatabase/test.txt"); 
      Doc doc = new SimpleDoc (fis, flavor, null); 
      //PrintJobWatcher pjDone = new PrintJobWatcher (pj); 
      /* print the doc as specified */ 
      pj.print (doc, aset); 
     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

fa il lavoro di stampa da altri applicazioni (come Word o Blocco note)? – Jeffrey

+0

sì stampa perfettamente da tutte le altre applicazioni. –

+1

Non si controlla quanti servizi di stampa vengono restituiti, è sufficiente il codice per utilizzare l'indice 0? (Mi chiedo solo se per esempio hai installato qualche pseudo-stampante) – Benj

risposta

0

Il tuo codice funziona correttamente. Ma probabilmente si sta cercando di stampare sulla stampante sbagliata ...

provare questo:

package printing; 

import java.io.FileInputStream; 
import javax.print.*; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 

/** @author Majid */ 
public class Printing { 

    public static void main (String [] args) { 
     // TODO code application logic here 
     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
     /* locate a print service that can handle it */ 
     PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset); 

     try { 
      int printer = getPrinter(pservices); 
      if(printer == -1) { 
       throw new Exception("No network printer found"); 
      } 
      DocPrintJob pj = pservices[2].createPrintJob(); 
      FileInputStream fis = new FileInputStream ("c:/Temp/test.txt"); 
      Doc doc = new SimpleDoc (fis, flavor, null); 
      pj.print (doc, aset); 
     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private int getPrinter(PrintService[] pservices) { 
     int printer = -1; 
     for(int i = 0; i<pservices.size(); i++) { 
      if(pservices[i].getName().contains("\\\\")) { 
       System.out.println("network printer: " + pservices[i].toString()); 
       printer = i; 
       break; 
      }   
     } 
     return printer; 
    } 
} 
1

@ moskiteau per questo che il numero di codice difficile [2] in

DocPrintJob pj = pservices[2].createPrintJob(); 

invece di ottenere il valore di stampante come indice pservices '?

DocPrintJob pj = pservices[printer].createPrintJob(); 

(mi dispiace se questo non è il posto giusto per chiarire questa domanda, ma questa è la mia prima domanda qui e non ha ancora trovare il modo di chiedere questo in qualsiasi altro modo)