Java 后台-zpl指令打印

Posted 浅安

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 后台-zpl指令打印相关的知识,希望对你有一定的参考价值。

package com.warehouse.common.util;

import com.google.common.collect.Lists;

import java.io.File;
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

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;

public class SimplePrint {

   byte[] dotfont;
   // String s_prt_buffer="^XA\n^JMA^LL180^PW660^MD10^RP2^PON^LRN^LH10,0\n",  s_prt = "";
   String s_prt = "^XA", s_prt_buffer="";

   static class Employees{
      private String name;
      private String companyName;
      private String identity;
      public  Employees(String name,String companyName,String identity){
         this.name=name;
         this.companyName=companyName;
         this.identity=identity;
      }
      public String getName() {
         return name;
      }

      public void setName(String name) {
         this.name = name;
      }

      public String getCompanyName() {
         return companyName;
      }

      public void setCompanyName(String companyName) {
         this.companyName = companyName;
      }

      public String getIdentity() {
         return identity;
      }

      public void setIdentity(String identity) {
         this.identity = identity;
      }
   }

   public static void main(String[] args) {
      List<Employees> employeesList= Lists.newArrayList();
      employeesList.add(new Employees("杨志军","启旭","340321198403266210"));
//    employeesList.add(new Employees("王拾红","启旭","61032119960522721X"));
//    employeesList.add(new Employees("李岩","启旭","130582198805021210"));
//    employeesList.add(new Employees("王爱丽","启旭","411024198811144724"));
      for(int i=0;i<employeesList.size();i++){
         Employees employees= employeesList.get(i);
         empPrint(employees.getIdentity(),employees.getName()+"| "+employees.getCompanyName());
      }

   }

   public static String empPrint(String barcode,String empNameComName){
      String resultStr=null;
      try{
         SimplePrint a = new SimplePrint();
         a.setCommand(barcode,empNameComName);
         String str = a.getCommand();
         System.out.println(str);
         resultStr= a.print(str);
      }catch (Exception e){
         resultStr="SimplePrint empPrint error";
         e.printStackTrace();
      }
      return resultStr;
   }

   public SimplePrint() throws Exception {
      String paths=CommonUtils.getAllMessage("config", "EMPLOYEE_PRINT_ZPL_PATH");
      File file = new File(paths);
      FileInputStream fis = new FileInputStream(file);
      dotfont = new byte[fis.available()];
      fis.read(dotfont);
      fis.close();

   }

   public void setCommand(String barcode,String nameCompanyName) {
      printCN(nameCompanyName, 100, 15,30,34,1);
      printBarcode(barcode, 180, 80);
   }
   protected String getCommand() {
//    return  s_prt_buffer+s_prt+"^PQ 1\n^XZ";
      return s_prt + s_prt_buffer+"^XZ";
   }

   public String print(String str) throws PrintException {
      PrintService psZebra = PrintServiceLookup.lookupDefaultPrintService();
      if (psZebra == null) {
         System.out.println("没有发现条码打印机.");
         return "没有发现条码打印机";
      }
      DocPrintJob job = psZebra.createPrintJob();
      byte[] by = str.getBytes();
      DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
      Doc doc = new SimpleDoc(by, flavor, null);
      job.print(doc, null);
      return null;
   }



   /**
    * 打印条形码
    * @param barcode 字符串
    * @param x x坐标
    * @param y y坐标
   //  * @param h 高度
    */
   protected void printBarcode(String barcode,int x, int y) {
//    s_prt_buffer +=  "^FO"+x+","+y+"^BY2,3,50^BCN,180,N,N,N,A^FD" + barcode + "^FS\n";
      s_prt_buffer +=  "^FO"+x+","+y+"^BY2,3,60^BCN,180,N,N,N,A^FD" + barcode + "^FS\n";
   }

   /**
    * 打印英文字符,数字
    * @param str
    * @param x
    * @param y
    */
   protected void printChar(String str,int x, int y,int h,int w) {
      System.out.println(str);
      s_prt_buffer +="^FO"+x+","+y+"^A0,"+h+","+w+"^FD"+str+"^FS";
   }
   protected void printCharR(String str,int x, int y,int h,int w) {
      System.out.println(str);
      s_prt_buffer +="^FO"+x+","+y+"^A0R,"+h+","+w+"^FD"+str+"^FS";
   }
   /**
    * 打印中文字符串
    * @param strCN
    * @param x
    * @param y
    */
   protected void printCN(String strCN, int x, int y,int h,int w,int b) {
      System.out.println(strCN);
      byte[] ch = str2bytes(strCN);
      System.out.println(ch.length);
      for (int off = 0; off < ch.length;) {
         if (((int) ch[off] & 0x00ff) >= 0xA0) {
            int qcode = ch[off] & 0xff;
            int wcode = ch[off + 1] & 0xff;
            s_prt_buffer = s_prt_buffer
                  + String.format("^FO%d,%d^XG0000%01X%01X,%d,%d^FS\n", x,
                  y, qcode, wcode,b,b);
            s_prt +=  String.format("~DG0000%02X%02X,00072,003,\n", qcode,
                  wcode);
            qcode = (qcode + 128 - 32) & 0x00ff;
            wcode = (wcode + 128 - 32) & 0x00ff;
            int offset = ((int) qcode - 16) * 94 * 72 + ((int) wcode - 1)
                  * 72;
            for (int j = 0; j < 72; j += 3) {
               qcode = (int) dotfont[j + offset] & 0x00ff;
               wcode = (int) dotfont[j + offset + 1] & 0x00ff;
               int qcode1 = (int) dotfont[j + offset + 2] & 0x00ff;
               s_prt +=  String.format("%02X%02X%02X\n", qcode, wcode,
                     qcode1);
            }
            x = x + 25*b;
            off = off + 2;
         } else if (((int) ch[off] & 0x00FF) < 0xA0) {

            printChar(String.format("%c",ch[off]), x,  y, h, w);
//          s_prt_buffer += String.format("^FO"+x+","+y+"^A0,"+h+","+w+"^FD%c^FS\n",ch[off]);
//          s_prt_buffer += "^FO"+x+","+y+"^A0,"+h+",20^FD"+ch[off]+"^FS\n";
            x = x + 15;
            off++;
         }
      }
   }

   byte[] str2bytes(String s) {
      if (null == s || "".equals(s)) {
         return null;
      }
      byte[] abytes = null;
      try {
         abytes = s.getBytes("gb2312");
      } catch (UnsupportedEncodingException ex) {
      }
      return abytes;
   }
}

 

以上是关于Java 后台-zpl指令打印的主要内容,如果未能解决你的问题,请参考以下文章

斑马打印机ZPL语言编程实战

使用ZPL打印代码39时跳过特殊字符

将 PNG 图像转换为 ZPL 代码

如何在垂直标签中垂直打印zpl条码

ZPL文件打印

ZPL 代码 128 与 mPDF 代码 128 输出不匹配