1

私の目的は、キャッシュ ドロワーをプログラムで開くことですが、Java が Windows ポートとどのように相互作用するかについての詳細な情報が見つからなかったため、機能させることができませんでした。これらは私が試した方法です(Javaコンソールにエラーはありません):

public void cashdrawerOpen()   {

    String code1 = "27 112 0 150 250"; //decimal
    String code2 = "1B 70 00 96 FA"; //hexadecimal
    String code = "ESCp0û."; //ascii

     PrintService service = PrintServiceLookup.lookupDefaultPrintService();
     System.out.println(service.getName());
     DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
    DocPrintJob pj = service.createPrintJob();
     byte[] bytes;
     bytes=code2.getBytes();
     Doc doc=new SimpleDoc(bytes,flavor,null);
      try {
        pj.print(doc, null);
    } catch (PrintException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}


public void cashdrawerOpen2(){
    String code1 = "27 112 0 150 250";
    String code2 = "1B 70 00 96 FA";
    String code = "ESCp0û.";
    FileOutputStream os = null;
    try {
        os = new FileOutputStream("USB001:POS-58");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
      PrintStream ps = new PrintStream(os);
      ps.print(code1.getBytes());
      ps.close();
}

次に、具体的にはこのスレッドに従ってcmdで遊び始めましたが、コマンド「copy /b open.bat USB001」を実行すると、「USB001を上書きしますか?(はい/いいえ/すべて)」

何か案が?

4

2 に答える 2

1

解決しました。

USB 経由でコマンドを送信する方法がわかりませんでした。LPT ポートをエミュレートする必要がありました。

プリンターに TM Virtual Port Driver などの名前のドライバーが付属している場合 (私の場合):

  1. それをインストールし、GUI でプリンター接続を構成します。
  2. Java メソッドを利用する

そうでない場合:

  1. コントロール パネルでプリンターを共有します。
  2. 管理者としてコマンドを開く
  3. NET USE LPT1 \[コンピュータ名]\Printer /Persistent:Yes (win8.1 では動作しません)
  4. Java から:

    public void cashdrawerOpen(){ 
        String code2 = "1B700096FA"; // my code in hex
        FileOutputStream os = null;
        try {
            os = new FileOutputStream("LPT1:POS-58");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
          PrintStream ps = new PrintStream(os);
        ps.print(toAscii(code2));
          ps.close();
    }
    
    public StringBuilder toAscii( String hex ){
    StringBuilder output = new StringBuilder();
    for (int i = 0; i < hex.length(); i+=2) {
    String str = hex.substring(i, i+2);
    output.append((char)Integer.parseInt(str, 16));
    }
     return output;
    
    }
    
于 2016-11-09T18:21:54.420 に答える
-1

さて...USB001ファイルは、コピー先の場所に既に存在している必要があります.open.batをまったく同じUSB001ファイル名にコピーしているため、上書きするかどうかを尋ねられます.

常に USB001 ファイルを上書きする場合は、/Y スイッチも使用します。次に例を示します。

copy /B /Y open.bat USB001

次のように入力して、コマンド プロンプトで COPY のすべてのスイッチを表示できます。

copy /?
于 2016-11-06T00:13:20.870 に答える