「java调用zpl」Java调用类
本篇文章给大家谈谈java调用zpl,以及Java调用类对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 24点阵西文和数字打印的怎么去除多余的空白部分
- 2、如何用VBA (2010) 去调用 ZPL语言,有知道的还烦请指点,最好能说明详细操作过程!
- 3、zpl语言中怎么调用宋体字体
- 4、如何通过zpl指令方式通过usb方式发送指令
- 5、java打印zpl
- 6、java调用zpl打印机
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调用类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。