如果是支持接口开发,肯定会有DLL的说明文档。那么按照文档调用DLL的方法就可以了。不同的打印机接口方法不一样,所以没有现成的代码。
java 和 DLL 交互的话可以使用 JNative 包,比较方便。
首先 System.loadLibrary(dllName)
public Integer executeFunction(String dllName ,String functionName,Object[] params){
try {
JNative func = new JNative(dllName, functionName)
func.setRetVal(Type.INT)
for(int i=0i<params.lengthi++){
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 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()
return func.getRetValAsInt()
} catch (Exception e) {
throw new RuntimeException(e)
}
}
调用的时候传dll名,函数名,和接口参数,详细的可以去了解一下。
条形码打印机型号不同,不过思路都是一样的,以下可参考,另外需要你自己参考你的条形码打印机的接口说明。因项目需要,对Godex EZ2300条码机进行调用打印, 驱动为Ez2000.dll, 用JNI可以实现调用,但比较麻烦, 需
要用到VC6进行DLL封装,改用JNative组件进行调用, 步骤如下:
1. 下载JNative-1.3.2.zip组件库
2. 解压出来后有JNative.jar / JNativeCpp.dll / libJNativeCpp.so三个文件,JNative.jar
置于%JAVA_HOME%/jre/lib/ext目录下, JNativeCpp.dll置于%SYSTEM%/WINDOWS/SYSTEM32目
录下
3.将Ez2000.dll置于%SYSTEM%/WINDOWS/SYSTEM32目录以及%JAVA_HOME%/jdk/bin目录下
4.
具体Java代码如下:
package com.athens.test
import org.xvolks.jnative.JNative
import org.xvolks.jnative.Type
import org.xvolks.jnative.exceptions.NativeException
public class Demo {
private static final String PRINTER_DLL = "Ez2000.dll"
public static void main(String [] args) {
Demo demo = new Demo()
System.loadLibrary("Ez2000")
JNative n = null
try {
n = demo.getJNativeByFunction("isready")
n.setRetVal(Type.INT)
// n.setParameter(1, Type.VOID, "")
n.invoke()
Integer isready = Integer.parseInt(n.getRetVal())
if(isready == 1){
System.out.println("条码机可以开始接收资料!Starting...")
System.out.println("Starting...")
// 打开端口
n = demo.getJNativeByFunction("openport")
n.setParameter(0, Type.STRING, "0")
n.invoke()
// 设定参数
n = demo.getJNativeByFunction("setup")
n.setRetVal(Type.INT)
n.setParameter(0, Type.INT, "30")
n.setParameter(0, Type.INT, "7")
n.setParameter(0, Type.INT, "2")
n.setParameter(0, Type.INT, "1")
n.setParameter(0, Type.INT, "0")
n.setParameter(0, Type.INT, "0")
n.invoke()
// 发出指令
n = demo.getJNativeByFunction("sendcommand")
n.setRetVal(Type.INT)
n.setParameter(0, Type.STRING, "W70")
n.invoke()
n.setRetVal(Type.INT)
n.setParameter(0, Type.STRING, "^P1")
n.invoke()
n.setRetVal(Type.INT)
n.setParameter(0, Type.STRING, "^L")
n.invoke()
n.setRetVal(Type.INT)
n.setParameter(0, Type.STRING, "AC,20,60,1,1,1,0,TEST")
n.invoke()
// 发送条形码
n = demo.getJNativeByFunction("ecTextOut")
n.setParameter(0, Type.INT, "20")
n.setParameter(1, Type.INT, "10")
n.setParameter(2, Type.INT, "34")
n.setParameter(3, Type.STRING, "标楷体")
n.setParameter(4, Type.STRING, "Athens Testing Successlly!!!")
n.invoke()
// 发出指令
n = demo.getJNativeByFunction("sendcommand")
n.setRetVal(Type.INT)
n.setParameter(0, Type.STRING, "E")
n.invoke()
// 关闭端口
n = demo.getJNativeByFunction("closeport")
n.invoke()
System.out.println("Ending...")
}else{
System.out.println("条码机无法接收资料!")
}
}catch(Exception e){
e.printStackTrace()
}finally{
if (n != null){
try {
n.dispose()
} catch (NativeException e) {
e.printStackTrace()
} catch (IllegalAccessException e) {
e.printStackTrace()
}
}
}
}
// 通过方法名取得JNative对象
public JNative getJNativeByFunction(String functionName) throws NativeException{
return new JNative(PRINTER_DLL, functionName)
}
}