2011-08-24 7 views
8

lp filenameコマンドを使用しても問題ないファイルがあります。javax.printを使用したカップによる印刷

ファイルはレシートインパクトプリンタ用のESC/Pファイルです。それは、LinuxのネイティブCUPSドライバとそのすべてが動作します。

javax.print APIを使用しようとしています。印刷をより細かく制御できるようにしています。Linuxはターゲットプラットフォームですが、クロスプラットフォーム対応にしておきたいと思います。

は私が男とデータ型(InputStreambyte[]Readerなど)のすべてのタイプに知られているすべてのDocFlavorの組み合わせを試してみた

それだけですべて一緒にprint()コマンドを無視するか、単にの白紙をフリップアウトのいずれか紙。 lp filenameを実行すると完璧な結果が得られます。javax.printは、lp filenameと同等の機能を果たすにはどうすればよいですか?

私はjavax.printを使用して設定されていません。他の「もの」を使用でき、cups4Jの調査を開始するかもしれませんが、Linux/* nixのみに制限されているようです。溶液。

私はファイル上でlpシステムコマンドを発行することができましたが、きめ細かい制御が必要です。これらは私たちが印刷している領収書ではなく、チケットで、チケットは$ 5.00から数千ドルの範囲です。現在、印刷の問題が検出された場合、取引は無効になり、印刷されたものがあれば無効となり、軽く転載しません。ああ、これを行う理由は、POSシステムをWindowsからLinuxに変更し、プリンタがシリアルポート経由でUSB経由で管理されているCUPSに直接アクセスするからです。ここで私のコードは動作しません。どんな助けもありがとうございます。

try { 
    // Find the default service 
    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 

    PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 

    // Create the print job 
    DocPrintJob job = service.createPrintJob(); 
    InputStream in = new FileInputStream("/home/bart/real.escp"); 
    Doc docNew = new SimpleDoc(in,flavor,null); 

    // Monitor print job events; for the implementation of PrintJobWatcher, 
    // see Determining When a Print Job Has Finished 
    PrintJobWatcher pjDone = new PrintJobWatcher(job); 

    // Print it 
    job.print(docNew, null); 

    // Wait for the print job to be done 
    pjDone.waitForDone(); 

    // It is now safe to close the input stream 
    in.close(); 
} catch (PrintException e) { 
} catch (IOException e) { 
} 
+1

印刷はせいぜいdiceyでプリンタに送信します。私は印刷の一部を行うためにlprコマンドでコマンドラインに砲撃しました。 1つの選択肢は、あなたのファイルをPDFのようなJavaが理解できる形式に変換してから、その上でjavax.printを使用できるかどうかを確認することです。 – Mitch

+0

これは、Linuxのesc/pコンバータがあるかもしれないが、なぜlpコマンドがうまく印刷されたときに気になるのだろうか?ESC/P(プリンタに直接送ることができる)からPDFへJava Happy) - > ESC/P(ドライバ経由) ESC/Pファイルを生成しています。とにかく、Cups4Jでうまくいって、実装に約15分かかりました。私がcups4Jを使用して、他のOS /印刷システムの問題が発生したときに対処します。 –

答えて

0

私はcups4jで問題ありません。 まずプリンタを入手してください。

try { 
     CupsClient client = new CupsClient("addressOfTheCupsServer", 631); 
     List<CupsPrinter> printers = client.getPrinters(); 
     if (printers.size() == 0) { 
      throw new RuntimeException("Cant list Printer"); 
     } 
     for (CupsPrinter cupsPrinter : printers) { 
      if (cupsPrinter.getName().equals("NameOfPrinter")) { 
       selectedPrinter = cupsPrinter; 
      } 
     } 
    }catch (Exception ignored){ 
     ignored.printStackTrace(); 
    } 
} 

は、次に印刷ジョブを作成して、Linux上でJavaから

PrintJob printJob = new PrintJob.Builder(inputStream).jobName("Jobname").build(); 
    PrintRequestResult result = selectedPrinter.print(printJob); 
関連する問題