本文打印机型号: TSC MA3400P
后端调用tsc打印机是通过DLL来进行调用的,首先你需要两个TSC文件直接复制到项目目录下边即可
可以直接去官网下载:https://www.chinatsc.cn/zh-CN/downloads
还需要把这dll文件放到你的C:\Windows下边的64或者system32文件夹下边
32位的和64位的注意一下
jna这个依赖可以代替工具包中的 jna.jar需要引入一下
如果电脑连接了tsc打印机驱动程序可以在这里下载设置
到此为止准备部分已经完成
官方提供了调用示例如下:
public class JniDll {
public interface TscLibDll extends Library {
TscLibDll INSTANCE = (TscLibDll) Native.loadLibrary ("TSCLIB", TscLibDll.class);
int about ();
int openport (String pirnterName);
int closeport ();
int sendcommand (String printerCommand);
int setup (String width,String height,String speed,String density,String sensor,String vertical,String offset);
int downloadpcx (String filename,String image_name);
int barcode (String x,String y,String type,String height,String readable,String rotation,String narrow,String wide,String code);
int printerfont (String x,String y,String fonttype,String rotation,String xmul,String ymul,String text);
int clearbuffer ();
int printlabel (String set, String copy);
int formfeed ();
int nobackfeed ();
int windowsfont (int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, String content);
}
public static void main(String[] args) {
TscLibDll.INSTANCE.openport("TSC TTP-243E Pro");
TscLibDll.INSTANCE.sendcommand("REM ***** This is a test by JAVA. *****");
TscLibDll.INSTANCE.setup("100", "100", "5", "8", "0", "0", "0");
TscLibDll.INSTANCE.clearbuffer();
TscLibDll.INSTANCE.printerfont ("100", "10", "3", "0", "1", "1", "(JAVA) DLL Test!!");
TscLibDll.INSTANCE.barcode("100", "40", "128", "50", "1", "0", "2", "2", "123456789");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 0, 3, 1, "arial", "DEG 0");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 90, 3, 1, "arial", "DEG 90");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 180, 3, 1, "arial", "DEG 180");
TscLibDll.INSTANCE.windowsfont(400, 200, 48, 270, 3, 1, "arial", "DEG 270");
TscLibDll.INSTANCE.printlabel("1", "1");
TscLibDll.INSTANCE.closeport();
}
}
如果在运行的过程中提示找不到文件需要做如下配置
第一步
第二步 设置OK运行
根据自己的业务来进行调整 以下是调用代码
try {
if(CollectionUtil.isEmpty(printList)){
return R.failed("打印的数据为空,不能打印");
}
TscPrintUtil.printLOTUS("105", "105", printList,"arial");
}
catch (Exception e) {
throw new OmsBusinessException(ErrorCodeEnum.E910001.code, StrUtil.format("打印服务异常"));
}
@Slf4j
public class TscPrintUtil {
/***
* 加载库文件
*/
private static final String LOAD_LIBRARY = "TSCLIB";
/***
* 设置 打印机名称(LOTUS)
*/
private static final String PRINTER_NAME_LOTUS = "TSC MA3400P";
/***
* LOTUS打印标签
*
* @param setupWidth 设置纸张宽度
* @param setupHeigth 设置纸张高度
* @param printList 打印参数
* @param fontType 字体类型 (宋体)
*/
public static void printLOTUS(String setupWidth, String setupHeigth, List<AsnLinePrintVo> printList,String fontType) {
for (AsnLinePrintVo list : printList) {
// 加载驱动
System.loadLibrary(LOAD_LIBRARY);
// 解决中文乱码
System.setProperty("jna.encoding", "GBK");
// 打印机型号
JniDll.TscLibDll.INSTANCE.openport(PRINTER_NAME_LOTUS);
// 设置标签的寬度、高度、列印速度、列印浓度、感应器类别、gap/black mark 垂直间距(标签纸 的间距)、gap/black mark 偏移距离)
JniDll.TscLibDll.INSTANCE.setup(setupWidth, setupHeigth, "5", "8", "0", "3", "0");
JniDll.TscLibDll.INSTANCE.clearbuffer();
//var cmd = 'QRCODE 条码X方向起始点,条码Y方向起始点,纠错级别,二维码高度,A(A和M),旋转 角 度,M2(分为类型1和类型2),S1 (s1-s8,默认s7),\"1231你好2421341325454353\"';
// 打印二维码的参数和内容
String partNumber ="QRCODE 300,820,Q,10,A,0,M2,S7,\"" + list.getPartNumber ()+"\"";
// 传送指令
JniDll.TscLibDll.INSTANCE.sendcommand(partNumber);
//设置文本(位置(x,y)、大小、旋转角度、文字X方向放大倍率,1~8 、文字Y方向放大倍率,1~8 字 体arial、内容)
JniDll.TscLibDll.INSTANCE.windowsfont(900, 100, 70, 270, 2, 0, fontType,
list.getPartNumber());
//如果Sku的中文名称不为空则打印
if(StringUtils.isNotBlank(list.getNameCN())){
if(list.getNameCN().length()>8){
JniDll.TscLibDll.INSTANCE.windowsfont(800, 100, 70, 270, 2, 0, fontType,
list.getNameCN().substring(0,8));
JniDll.TscLibDll.INSTANCE.windowsfont(700, 100, 70, 270, 2, 0, fontType,
list.getNameCN().substring(9,list.getNameCN().length()));
} else{
JniDll.TscLibDll.INSTANCE.windowsfont(800, 100, 70, 270, 2, 0, fontType,
list.getNameCN());
}
}
if(StringUtils.isNotBlank(list.getNameEN())){
if(list.getNameEN().length()>31){
JniDll.TscLibDll.INSTANCE.windowsfont(600, 100, 70, 270, 2, 0, fontType,
list.getNameEN().substring(0,15));
JniDll.TscLibDll.INSTANCE.windowsfont(500, 100, 70, 270, 2, 0, fontType,
list.getNameEN().substring(16,30));
JniDll.TscLibDll.INSTANCE.windowsfont(400, 100, 70, 270, 2, 0, fontType,
list.getNameEN().substring(31,list.getNameEN().length()));
}else if(list.getNameEN().length()>15 && list.getNameEN().length()<31) {
JniDll.TscLibDll.INSTANCE.windowsfont(600, 100, 70, 270, 2, 0, fontType,
list.getNameEN().substring(0,15));
JniDll.TscLibDll.INSTANCE.windowsfont(500, 100, 70, 270, 2, 0, fontType,
list.getNameEN().substring(16,list.getNameEN().length()));
} else {
JniDll.TscLibDll.INSTANCE.windowsfont(600, 100, 70, 270, 2, 0, fontType,
list.getNameEN());
}
}
JniDll.TscLibDll.INSTANCE.windowsfont(900, 820, 70, 270, 2, 0, fontType,
"Qty:"+String.valueOf(list.getNum()));
//打印的页数
JniDll.TscLibDll.INSTANCE.printlabel("1", String.valueOf(list.getNum()));
// 关闭程序
JniDll.TscLibDll.INSTANCE.closeport();
}
}