簡體   English   中英

如何從java代碼向打印機發送包含ESC / POS命令的.text文件

[英]how to send a .text file containing ESC/POS commands to a printer from java code

到目前為止我所擁有的是以下代碼:

 FileInputStream fin =new FileInputStream(filename);
 DocFlavor df = DocFlavor.INPUT_STREAM.AUTOSENSE;                    
 Doc d = new SimpleDoc(fin, df, null);   
 PrintService P = PrintServiceLookup.lookupDefaultPrintService();

  if (P != null) {              
     DocPrintJob job = P.createPrintJob();  
     job.print(d, null);  
            }
    fin.close;

代碼工作正常,但如果包含命令的文件打印機不解釋命令,它會繼續打印文件的確切字符串內容。 那么如何向愛普生收據打印機發送命令?

正如已經發現的那樣,命令可能不是直接以ESC / POS格式發送,而是需要在java代碼中將代碼解釋為十六進制,並按照我發布的方式發送到打印機,無論是從文件還是字符串。 例如,而不是通過以下方式初始化Epson收據打印機:

  PRINT #1, CHR$(&H1B);"@";

並在收據打印機中剪切紙張代碼可能是:

  PRINT #1, CHR$(&H1D);"V";CHR$(1);

所以這就是它對我有用的方式。

    char[] initEP = new char[]{0x1b, '@'};
    char[] cutP = new char[]{0x1d,'V',1};
    String Ptxt=  new String(initEP)+ " text data \n \n \n"+ new String(cutP);

代替

    Doc d = new SimpleDoc(new FileInputStream(filename), df, null);  

使用

    InputStream pis = new ByteArrayInputStream(Ptxt.getBytes());
    Doc d = new SimpleDoc(pis, df, null);

然而,它可能是一種發送代碼作為其命令格式的方法,但到目前為止絕對不能這樣做。 並且不確定它是否可以從java完成。

最后一步是在輸入文件中使用真正的ASCII值插入打印機命令 - 例如,轉義字符是ASCII值0x1B。 這可以通過使用允許插入任何ASCII值的編輯器來完成,例如十六進制編輯器或Notepad ++的字符面板(在編輯菜單下),或者通過以編程方式修改從文件讀取后發送到打印機的數據。

運行linux(Ubuntu 12)時,如果打印機驅動程序是通用+文本,則會出現此問題。 選擇通用+原始隊列,使打印機更像ESC POS設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM