2012-04-27 5 views
5

내 컴퓨터에 연결된 HP DeskJet1000 USB 프린터에서 텍스트 파일을 인쇄하려면 아래 표시된 Java 코드를 사용하고 있습니다. 이 코드를 실행할 때마다 인쇄 작업이 전송되지만 프린터는 아무 것도 인쇄하지 않습니다. 상태는 프린터가 인쇄 중이지만 페이지를 차지조차하지 않음을 나타냅니다. 도와주세요! 내 코드는 다음과 같습니다.Java 인쇄 코드가 작동하지 않습니다.

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

다른에서 프린터 작동합니까 응용 프로그램 (예 : Word 또는 메모장)? – Jeffrey

+0

예. 다른 모든 응용 프로그램에서 완벽하게 인쇄됩니다. –

+1

반환되는 인쇄 서비스의 수를 확인하지 않고 색인 0을 사용하는 하드 코드를 사용합니까? (예를 들어 pseudo 프린터가 설치되어 있는지 궁금합니다.) – Benj

답변

0

코드가 실제로 작동합니다. 을 얻는 대신 왜 하드 코드 번호 [2]

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

에 moskiteau @

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

:하지만 아마 당신이 시도 ... 잘못된 프린터로 인쇄

을 시도하고 값이 인 프린터을 pservices '색인으로 사용 하시겠습니까?

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

(이이 질문을 명확히 할 수있는 권리 장소를 밤은 경우 죄송 메신저,하지만 여기 내 첫 질문하고 다른 방법이 요청하는 방법을 찾을 수 didnt한다)

관련 문제