java调用条码打印机指令进行打印

因项目需要,对Argox OS-214 plus series PPLA条码机进行调用打印, 驱动为BCLW32.DLL、WinPort.dll、Winppla.dll, 用JNI可以实现调用,但比较麻烦, 需 要对DLL封装,改用JNative组件进行调用。

整个实现步骤为:

1. 下载JNative-1.3.2.zip组件库。 

2. 解压出来后有JNative.jar  /  JNativeCpp.dll  /  libJNativeCpp.so三个文件,JNative.jar引用于工程中, JNativeCpp.dll置于C:/WINDOWS/SYSTEM32目录下 。

3.将BCLW32.DLL、WinPort.dll、Winppla.dll, 放一固定文件夹下,(有一种调用是放在C:/WINDOWS/SYSTEM32下 但是我测试以后发现如果放在这里以后就找不到dll文件了 具体原因还不清楚!

4.具体代码如下:

import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;


/**
 * 条形码打印工具类
 * 
 * @author
 * 
 */
public class NativeDllFacadeUtil_new {


private static String szSaveFile = "C:\\Argox\\PPLA_Example.Prn";
private static final String PRINTER_DLL = "Winppla.dll";


/**
* 加载dll文件
*/
static {

// System.load("G:\\kd_work\\dll\\BCLW32.dll");
// System.load("G:\\kd_work\\dll\\WinPort.dll");
// System.load("G:\\kd_work\\dll\\Winppla.dll");
System.load("C:\\dll\\BCLW32.dll");
System.load("C:\\dll\\WinPort.dll");
System.load("C:\\dll\\Winppla.dll");
}


/**
* 获取dll的指令

* @param functionName
*            指令名称
* @return
* @throws NativeException
*/
private static JNative getJNativeByFunction(String functionName)
throws NativeException {
return new JNative(PRINTER_DLL, functionName);
}


/**
* 执行指令

* @param functionName
* @param params
*            参数集合
* @return
*/
public static int executeFunction(String functionName, Object[] params) {
JNative func = null;
try {
func = getJNativeByFunction(functionName);
func.setRetVal(Type.INT);
if (params != null && params.length > 0) {
for (int i = 0; i < params.length; i++) {
if (params[i] instanceof String)
func.setParameter(i, (String) params[i]);
else if (params[i] instanceof Integer)
func.setParameter(i, ((Integer) params[i]).intValue());
else if (params[i] instanceof Pointer)
func.setParameter(i, (Pointer) params[i]);
else if (params[i] instanceof Character)
func.setParameter(i,  Type.PSTRUCT,(String)params[i].toString());
else if (params[i] instanceof Boolean)
func.setParameter(i, Type.INT, params[i].toString());
else if (params[i] instanceof byte[])
func.setParameter(i, Type.PSTRUCT, (byte[]) params[i]);
}
}
func.invoke();
//System.out.println(functionName +"  ************--> "+func.getRetValAsInt());
return func.getRetValAsInt();
} catch (Exception e) {
throw new RuntimeException(e);


}finally{
if(func!=null){
//func.dispose();
}
}


}


public static void main(String[] args) throws NativeException,
IllegalAccessException {
int nLen, ret;
byte[] pbuf = new byte[128];
String ver, strmsg;
int var = executeFunction("A_Get_DLL_Version", new Object[] { 0 });
ver = var + "";
nLen = executeFunction("A_GetUSBBufferLen", null) + 1;
strmsg = "DLL ";
strmsg += ver;
strmsg += "\r\n";
if (nLen > 1) {
executeFunction("A_EnumUSB", new Object[] { new String(pbuf) });
executeFunction("A_CreateUSBPort", new Object[] { 1 });
} else {
ret = executeFunction("A_CreatePrn", new Object[] { 1, "" });
strmsg += "Open ";
strmsg += szSaveFile;
if (0 != ret) {
strmsg += " file fail!";
} else {
strmsg += " file succeed!";
}
}

executeFunction("A_Set_DebugDialog", new Object[] { 1 });
        executeFunction("A_Set_Unit", new Object[] { 'n' });
        executeFunction("A_Set_Syssetting", new Object[] {1, 0, 0, 0, 0});
executeFunction("A_Set_Darkness", new Object[] { 6 });
        executeFunction("A_Del_Graphic", new Object[] { 1,"*" });
        executeFunction("A_Clear_Memory",null);
        //String path = NativeDllFacadeUtil_new.class.getClassLoader().getResource("/").getPath(); 
        //画一条线
//executeFunction("A_Draw_Line", new Object[] { 'A', 0, 60, 700, 2 });
//打印2维条码
        // A_Bar2d_QR_M(100, 100, 4, '6', 10, 2, 'M', 1, 'A', 'A', 4, "N123456");
        //A_Bar2d_DataMatrix(100, 100, 1, 8, 8, 200, 0, 24, 24, 'N', 2, "DATAMATRIX");
executeFunction("A_Bar2d_DataMatrix", new Object[] { 5,35, 1, 2, 2 ,200,0,24,24,'N',2,"abc_2345671234567890123456789012345678901234567890" });

String outString="00Cr17Ni12Mo2";
int width = 0;
if (outString.length() <= 6) {
       width = 28;
     }
     else {
       width = 144 / outString.length();
}
executeFunction("A_Prn_Text_TrueType_W", new Object[] { 35,48, 20, width, "Times New Roman",1,400,0,0,0,"AB",outString,1 });

outString = "100*2500*10000";
if (outString.length() <= 6) {
       width = 28;
     }
     else {
       width = 144 / outString.length();
}
executeFunction("A_Prn_Text_TrueType_W", new Object[] { 135,48, 20, width, "Times New Roman",1,400,0,0,0,"AC",outString,1 });

outString = "CCCHA943373-1-1";
if (outString.length() <= 6) {
       width = 28;
     }
     else {
       width = 144 / outString.length();
}
executeFunction("A_Prn_Text_TrueType_W", new Object[] { 35,35, 20, width, "Times New Roman",1,400,0,0,0,"AD",outString,1 });
 
outString = "902A-11-999-1";
if (outString.length() <= 6) {
       width = 28;
     }
     else {
       width = 144 / outString.length();
}
executeFunction("A_Prn_Text_TrueType_W", new Object[] { 135,35, 20, width, "Times New Roman",1,400,0,0,0,"AE",outString,1 });

executeFunction("A_Print_Out", new Object[] { 1, 1, 1, 1 });
executeFunction("A_ClosePrn", null);

}
}

5 .需要注意在jnative中对数据类型的转换。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Java Zebra条码打印机SDK是专门为开发人员提供的一个Java软件开发工具包,用于与Zebra品牌的条码打印机进行通信和控制。该SDK提供了一系列的API(应用程序接口),使开发人员能够轻松地集成条码打印功能到自己的Java应用程序中。 使用Java Zebra条码打印机SDK,开发人员可以实现以下功能: 1. 连接和配置打印机:SDK提供了与Zebra打印机进行连接和配置的方法,开发人员可以通过SDK直接与打印机进行通信,设置打印机参数,如打印分辨率、纸张类型和大小等。 2. 创建和打印条码:SDK提供了生成和打印各种类型的条码的方法,如二维码、条形码、QR码等。开发人员可以通过SDK指定条码的内容、尺寸、格式和位置等参数,从而生成和打印出符合需求的条码。 3. 自定义打印模板:SDK支持自定义打印模板,开发人员可以通过SDK指定打印样式、布局和格式等,以满足特定的打印需求。这样,打印出来的条码可以根据需求显示自定义的文本、图像和样式等。 4. 打印预览和设置:SDK还提供了预览和设置打印参数的方法,开发人员可以在实际打印前预览打印效果,并修改打印参数,如字体、颜色和对齐方式等。 总之,Java Zebra条码打印机SDK为开发人员提供了一个简单、快速集成和控制Zebra条码打印机的工具包,使他们能够轻松地在自己的Java应用程序中实现条码打印功能。无论是对于需要批量打印条码的生产环境,还是对于需要实时打印条码的仓储和物流环境,该SDK都能满足开发人员的需求,提升工作效率。 ### 回答2: Java Zebra条码打印机 SDK 是一种用于与Zebra条码打印机进行交互的软件开发工具包。该SDK提供了一系列的Java类和方法,可以轻松地在Java应用程序中实现与Zebra条码打印机的通信和控制。 使用Java Zebra条码打印机 SDK,开发人员可以利用其提供的功能和方法,实现以下操作: 1. 连接和配置打印机:SDK允许开发人员与Zebra条码打印机建立连接,并配置打印机的设置,例如打印分辨率、打印速度、纸张尺寸等。 2. 设计和生成条码:开发人员可以使用SDK提供的方法,生成不同类型的条码,如二维码、条形码等。同时,SDK也支持自定义条码的样式和格式。 3. 打印标签和票据:通过SDK,开发人员可以编写Java代码,实现将生成的条码和其他信息打印在标签或票据上。可以设置打印参数,如打印数量、打印方向等。 4. 监控打印任务:SDK还提供了监控打印任务的功能,开发人员可以获取打印进度、错误信息等,并根据需要进行相应的处理和通知。 总之,Java Zebra条码打印机 SDK是一种方便、灵活的工具,可以帮助开发人员在Java应用程序中快速集成和控制Zebra条码打印机,实现自动化的条码打印和管理。 ### 回答3: Java Zebra条码打印机SDK是一种用Java编程语言开发的软件开发工具包(Software Development Kit),用于与Zebra品牌的条码打印机进行交互和控制。 该SDK提供了一系列的类和方法,可以方便地实现条码打印机的功能,例如打印文本、条码、图像等。通过该SDK,开发人员可以轻松地将条码打印机集成到他们的Java应用程序中。 Java Zebra条码打印机SDK具有以下主要特点: 1. 简化操作:该SDK提供了简洁易用的方法和函数,使开发人员能够快速实现打印功能,无需深入了解条码打印机的具体细节。 2. 多种打印选项:开发人员可以使用SDK提供的功能来设置打印参数,例如纸张尺寸、打印方向、打印速度等,以满足不同应用场景的需求。 3. 多种打印格式:SDK支持多种标准条码格式,如Code 39、Code 128、QR码等,并且可以自定义条码样式,以满足不同的条码打印需求。 4. 异常处理:SDK提供了完善的错误处理机制,开发人员可以通过捕捉和处理异常来保证打印过程的稳定性和可靠性。 5. 跨平台支持:Java Zebra条码打印机SDK可以在不同操作系统上运行,包括Windows、Linux和Mac OS等,使开发人员能够在各种环境中使用。 总之,Java Zebra条码打印机SDK为开发人员提供了一种简便而强大的工具,使他们可以轻松实现与Zebra条码打印机的交互和控制,并且可以根据需求进行各种定制和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值