如何用JAVA调用TLP条码打印机打印条码

Python015

如何用JAVA调用TLP条码打印机打印条码,第1张

一般来说条码打印机都有自己专门的DLL接口文件,不需要调用系统的Dll。

如果是支持接口开发,肯定会有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)

}

}