JAVA调用TSC打印机打印标签(二维码,数据等)超详细!!

本文打印机型号: 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();
            }
    }

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值