2016-09-22 9 views
1

サーマルプリンターに生データを印刷するJavaプログラムがあります。このコードはサーバーでは完璧に機能しますが、クライアントでアクセスすると、クライアントのデフォルトプリンタではなくサーバーのプリンタで印刷されます。 以下は私が印刷に使用したコードです。コードを教えてください。次のコードでプリンターはクライアントの代わりにサーバーで印刷されます

import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 

import javax.print.Doc; 
import javax.print.DocFlavor; 
import javax.print.DocPrintJob; 
import javax.print.PrintException; 
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.event.PrintJobAdapter; 
import javax.print.event.PrintJobEvent; 

public class PrintText { 

    public static void main(String[] args) throws PrintException, IOException { 

     String defaultPrinter = PrintServiceLookup.lookupDefaultPrintService().getName(); 
     System.out.println("Default printer: " + defaultPrinter); 
     PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 

     // prints the famous hello world! plus a form feed 
     InputStream is = new ByteArrayInputStream("\nMadha Enterprice\n".getBytes(UTF8)); 

     PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
     pras.add(new Copies(1)); 

     DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
     Doc doc = new SimpleDoc(is, flavor, null); 
     DocPrintJob job = service.createPrintJob(); 

     PrintJobWatcher pjw = new PrintJobWatcher(job); 
     job.print(doc, pras); 
     pjw.waitForDone(); 
     is.close(); 
    } 
} 

class PrintJobWatcher { 
    boolean done = false; 

    PrintJobWatcher(DocPrintJob job) { 
     job.addPrintJobListener(new PrintJobAdapter() { 
      public void printJobCanceled(PrintJobEvent pje) { 
       allDone(); 
      } 

      public void printJobCompleted(PrintJobEvent pje) { 
       allDone(); 
      } 

      public void printJobFailed(PrintJobEvent pje) { 
       allDone(); 
      } 

      public void printJobNoMoreEvents(PrintJobEvent pje) { 
       allDone(); 
      } 

      void allDone() { 
       synchronized (PrintJobWatcher.this) { 
        done = true; 
        System.out.println("Printing done ..."); 
        PrintJobWatcher.this.notify(); 
       } 
      } 
     }); 
    } 

    public synchronized void waitForDone() { 
     try { 
      while (!done) { 
       wait(); 
      } 
     } catch (InterruptedException e) { 
     } 
    } 
} 
+2

サーバーをどういう意味ですか?私はここにクライアント/サーバーアーキテクチャは見当たりません...このコードはサーバー上で動作していますか?ウェブアプリケーションの一部ですか、あるいはあなたは「クライアント」に投稿した正確なコードを実行していますか? – Plirkee

+0

これは正確なプログラムではなく、私が使った正確なロジックです。私はクライアントマシンに印刷するために同じロジックを持つジャージー残りのAPIを使用しています。サーバーはTomcat7です。 –

+1

このコードをサーバー側で実行すると、サーバー側で印刷されます。それはそれと同じくらい簡単です。どのようにしてこのコードが呼び出されたのかを明確にしていないので、実行がどこで実行されるのかは明確ではありません。しかし、あなたの問題の説明から私はそれがサーバー側で実行されることを推論します... – Plirkee

答えて

1

PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 

あなたはこのコードが実行するマシン上のデフォルトのプリンタを選択する - これは、サーバー上で実行されている場合、それは、サーバのデフォルトのプリンタに印刷することを期待されています。

関連する問題