「java调用zpl」Java调用类

博主:adminadmin 2023-03-20 20:04:07 371

本篇文章给大家谈谈java调用zpl,以及Java调用类对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 24点阵西文和数字打印的怎么去除多余的空白部分

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

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.standard.PrinterName;

import sun.awt.AppContext;

/**

* 采用点阵字库ts24.lib

* @author Labrador

*

*/

public class ZplPrinter {

private String printerURI = null; //打印机完整路径

private PrintService printService = null; //打印机服务

private byte[] dotFont;

private String darkness = "~SD22"; //Set Darkness设置色带颜色的深度 0-30

private String width = "^PW1200"; //Print Width打印宽度0-1500

private String length = "^LL800"; //Label Length标签长度0-x(暂无作用)

private String begin = "^XA" + darkness + width; //标签格式以^XA开始

private String end = "^XZ"; //标签格式以^XZ结束

private String content = ""; //打印内容

private String message = ""; //打印的结果信息

/**

* 构造方法

* @param printerURI 打印机路径

*/

public ZplPrinter(String printerURI){

this.printerURI = printerURI;

//加载字体

File file = new File("C://ts24.lib");

if(file.exists()){

FileInputStream fis;

try {

fis = new FileInputStream(file);

dotFont = new byte[fis.available()];

fis.read(dotFont);

fis.close();

} catch (IOException e) {

e.printStackTrace();

}

}else{

System.out.println("C://ts24.lib文件不存在");

}

//初始化打印机

AppContext.getAppContext().put(PrintServiceLookup.class.getDeclaredClasses()[0], null);//刷新打印机列表

PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);

if (services != null services.length 0) {

for (PrintService service : services) {

if (printerURI.equals(service.getName())) {

printService = service;

break;

}

}

}

if (printService == null) {

System.out.println("没有找到打印机:["+printerURI+"]");

//循环出所有的打印机

if (services != null services.length 0) {

System.out.println("可用的打印机列表:");

for (PrintService service : services) {

System.out.println("["+service.getName()+"]");

}

}

}else{

System.out.println("找到打印机:["+printerURI+"]");

System.out.println("打印机名称:["+printService.getAttribute(PrinterName.class).getValue()+"]");

}

}

/**

* 设置条形码

* @param barcode 条码字符

* @param zpl 条码样式模板

*/

public void setBarcode(String barcode,String zpl) {

content += zpl.replace("${data}", barcode);

}

/**

* 中文字符、英文字符(包含数字)混合

* @param str 中文、英文

* @param x x坐标

* @param y y坐标

* @param eh 英文字体高度height

* @param ew 英文字体宽度width

* @param es 英文字体间距spacing

* @param mx 中文x轴字体图形放大倍率。范围1-10,默认1

* @param my 中文y轴字体图形放大倍率。范围1-10,默认1

* @param ms 中文字体间距。24是个比较合适的值。

*/

public void setText(String str, int x, int y, int eh, int ew, int es, int mx, int my, int ms) {

byte[] ch = str2bytes(str);

for (int off = 0; off ch.length;) {

if (((int) ch[off] 0x00ff) = 0xA0) {//中文字符

try {

int qcode = ch[off] 0xff;

int wcode = ch[off + 1] 0xff;

content += String.format("^FO%d,%d^XG0000%01X%01X,%d,%d^FS\n", x, y, qcode, wcode, mx, my);

begin += 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;

begin += String.format("%02X%02X%02X\n", qcode, wcode, qcode1);

}

x = x + ms * mx;

off = off + 2;

} catch (Exception e) {

e.printStackTrace();

//替换成X号

setChar("X", x, y, eh, ew);

x = x + es;//注意间距更改为英文字符间距

off = off + 2;

}

} else if (((int) ch[off] 0x00FF) 0xA0) {//英文字符

setChar(String.format("%c", ch[off]), x, y, eh, ew);

x = x + es;

off++;

}

}

}

/**

* 英文字符串(包含数字)

* @param str 英文字符串

* @param x x坐标

* @param y y坐标

* @param h 高度

* @param w 宽度

*/

public void setChar(String str, int x, int y, int h, int w) {

content += "^FO" + x + "," + y + "^A0," + h + "," + w + "^FD" + str + "^FS";

}

/**

* 英文字符(包含数字)顺时针旋转90度

* @param str 英文字符串

* @param x x坐标

* @param y y坐标

* @param h 高度

* @param w 宽度

*/

public void setCharR(String str, int x, int y, int h, int w) {

content += "^FO" + x + "," + y + "^A0R," + h + "," + w + "^FD" + str + "^FS";

}

/**

* 获取完整的ZPL

* @return

*/

public String getZpl() {

return begin + content + end;

}

/**

* 重置ZPL指令,当需要打印多张纸的时候需要调用。

*/

public void resetZpl() {

begin = "^XA" + darkness + width;

end = "^XZ";

content = "";

}

/**

* 打印

* @param zpl 完整的ZPL

*/

public boolean print(String zpl){

if(printService==null){

message = "打印出错:没有找到打印机["+printerURI+"]";

System.out.println("打印出错:没有找到打印机["+printerURI+"]");

return false;

}

DocPrintJob job = printService.createPrintJob();

byte[] by = zpl.getBytes();

DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;

Doc doc = new SimpleDoc(by, flavor, null);

try {

job.print(doc, null);

message = "已打印";

System.out.println("已打印");

return true;

} catch (PrintException e) {

message = "打印出错:"+e.getMessage();

System.out.println("打印出错:"+e.getMessage());

e.printStackTrace();

return false;

}

}

public String getMessage(){

return message;

}

/**

* 字符串转byte[]

* @param s

* @return

*/

private byte[] str2bytes(String s) {

if (null == s || "".equals(s)) {

return null;

}

byte[] abytes = null;

try {

abytes = s.getBytes("gb2312");

} catch (UnsupportedEncodingException ex) {

ex.printStackTrace();

}

return abytes;

}

}

如何用VBA (2010) 去调用 ZPL语言,有知道的还烦请指点,最好能说明详细操作过程!

vba是access或excel 中的一种standart语言.你说的是那一个?

Excel中的话 运行宏 然后它写了个自动代码 你看那个代码自己研究一哈

zpl语言中怎么调用宋体字体

ZEBRA中文字库的用法

在ZEBRA提供的中文字库里包括一个简宋体 Msgbmd24.zsc 和一个繁楷体Mkaimd24.zsc,以及三个码表文件GB.ZSE,BIG5.ZSE,UNICODE.ZSE。

1 在开始工作之前首先确认打印机连在并口,或将串口设成N,8,1。建议 用并口。

2 根据需要选择字体和内码码表,并将相应的文件COPY 到打印机中。值得注意的是要将下传的目标盘符改成相应的盘符。

其中:

R: DRAM

B: PCMCIA Card

E: Flash Memory

例:

~DEE:GB.DAT,29780,

~DLE:MSUNG24,546172,24,24,21,8,

3 做完以上的步骤,我们可以验证一下字体是否已经成功的DOWNLOAD到打

印机里了。

^XA

^WDE:*.* //E:为相应的盘符

^XZ

将上面三句ZPLII传到打印机,打印机会把E:内的目录打出来。我们可

以对照一下有没有我们传下去的文件。GB.DAT MSUNG24

4 现在我们可以开始用ZEBRA打汉字了。先试一试:

^XA

^CI14 //改成中文字符集

^SEE:GB.DAT //选择码表

^CWJ,E:MSUNG24 //影射字库文件到字体 J (根据具体需要定)

^CI14

^FO100,200^AJN,72,72^FD北京某公司^FS

^CI0 //改成英文字符集

^FO100,320^A0N,40,60^FDGICOM Enterprise Inc.^FS

^XZ

附录:本文中用到的ZPL II指令

^CIx 改变国际字符集

x = 0 USA1(确省值)

14 16-bit(Unicode) 双字节可调字体

15 Shift-JIS for Japanese fonts

16 EUC for scalable fonts

Sample:

^XA

^CI14

^SEE:GB.DAT

^CW1,E:MSUNG24.FNT

^CI14

^FO50,30^A1N,48,48^PMN^FWR^FD中华人民共和国^FS

^FO50,90^A1N,48,48^FD北京威腾电子有限公司^FS

^FO50,150^A1N,48,48^FD冒澧荭瘕觥赧綮謦癃溧^FS

^CI0

^XZ

如何通过zpl指令方式通过usb方式发送指令

1,安装环路网卡loopback,windonws自带的,然后共享lpt1就可以直接当并口使用了,cmd里就是直接copy指令到lpt1,这个方法百度一下可以找到

2,使用C#调用默认打印机的方式,先将ZM400设置为默认打印机,再把所有的打印命令全部付给一个变量,再用C#打印这个变量,我一般是把指令存在一个文件里,打印时调用这个文件

另外,这个打印端口跟驱动没有关系,当然必须要安装正确的驱动,但安装成功后只是在设备里虚拟出一个usb口USB1,你再安装一遍驱动会出现USB2,但我们不能像调用LPT1和COM1那样去使用这个USB1

java打印zpl

装一个ZebraDesigner,按照格式设置,打印预览里勾上打印到文件,然后打印后会让你保存一个文件,用文本打开这个文件即可;

java调用zpl打印机

StringBuffer sb3 = new StringBuffer();

ArrayListString values3 = items3;

for (int i = 0; values3 != null i values3.size(); i++) {

sb3.append(values3.get(i));

sb3.append('\n');

System.out.println(values3);

}

关于java调用zpl和Java调用类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。