2012-04-27 8 views
5

Estoy utilizando el código java que se muestra a continuación para imprimir un archivo de texto en una impresora USB HP DeskJet1000 conectada a mi computadora. Cada vez que ejecuto este código, se envía un trabajo de impresión pero la impresora no imprime nada. El estado muestra que la impresora está imprimiendo pero ni siquiera toma una página. ¡Por favor ayuda! Mi código sigue:Código de impresión Java no funciona

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

¿Funciona la impresora desde otro aplicaciones (como Word o Notepad)? – Jeffrey

+0

sí, se imprime perfectamente desde todas las demás aplicaciones. –

+1

No verifica cuántos servicios de impresión se devuelven, ¿solo codifica para usar el índice 0? (Solo me pregunto si tiene instalada una pseudo impresora) – Benj

Respuesta

0

Su código está funcionando realmente. Pero probablemente usted está intentando imprimir en la impresora incorrecta ...

intente esto:

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 por qué número de código duro [2] en

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

en vez de conseguir la valor de impresora como índice de pservices?

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

(lo siento si este no es el lugar adecuado para aclarar esta cuestión, pero esta es mi primera pregunta aquí y no encontrar cómo hacer esto en cualquier otra forma)

Cuestiones relacionadas