2012-04-27 15 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を使用するハードコードを使用するだけですか? (例えば擬似プリンタがインストールされているかどうか疑問に思っています) – 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の場合)

関連する問題