说下心得自己一个人搞了很久,终于自己搞出来了。在这过程中知道了资源有多难找,希望大家能能够轻松一些。

1.安装bartender

2.模版制作

3.配置环境

        bartender环境注册:将bartender的两个dll文件放在C:/windows/system32文件夹下,

且注册dll文件。Interop.BarTender.dll以及Seagull.BarTender.Print.dll。如果注册不了,自行查找方法,网上有很多。

        java:jacob.dll文件也放置在上述路径下,java安装目录的jre/bin文件夹下。还要在配置文件中导入jacob的jar包。记住:dll以及jar版本要对应。本人采用的是jdk8,以及jacob1.19。

4.附以下代码

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
 * @author Bartender标签打印
 * @witer liling
 */
public class BartenderUtils {

    public static void main(String[] args) {

        BartenderUtils bu = new BartenderUtils();
        bu.printBTW();
    }

    private void printBTW() {
        //要运行COM组件,需要先添加jacob包
        ComThread.InitSTA();
        while (true) {
            PrintLabelHuaqin bo1 = new PrintLabelHuaqin();
            System.out.println("回车键进行下一步,退出程序直接关闭\n请在下方输入你的序列条码号:");
            Scanner scanner = new Scanner(System.in);

            //next方式接收字符串(加入下行代码可以接收空格)
            scanner.useDelimiter("\n");
            String down = scanner.next();
            //自动转为大写
            bo1.setDown(down.toUpperCase());

            bo1.setTemplatePath("C:\\BQ\\上标签.btw");//需要打印二维码所在本地位置
            String up = "";
            System.out.println("请在下方输入你的下标起始数:");
            Scanner scanner1 = new Scanner(System.in);
            int index = scanner1.nextInt();
            System.out.println("请在下方输入你的下标数量:");
            int num = scanner1.nextInt();
            // 创建Date对象,表示当前时间
            Date date = new Date();
            // 创建SimpleDateFormat对象,指定目标格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
            // 调用format() 方法,格式化时间,转换为指定格式字符串
            String today = sdf.format(date);
            for (int i = num; 0 < i; i--) {
                String indexNum = ""+index;
                if(indexNum.length()>10&&indexNum.length()<100){
                    indexNum="0"+indexNum;
                }else if (indexNum.length()<10&&indexNum.length()>0){
                    indexNum="00"+indexNum;
                }
                up = "5000PCS " + today + " " +indexNum;
                bo1.setUp(up);
                bo1.setNumberSerializedLabels(1);

                //加载Bartender进程,需要先安装Bartender,这边安装是BT2022版本
                ActiveXComponent btApp = new ActiveXComponent("BarTender.Application");
                System.out.println("开始打印!!!!");
                //加载Bartender模板控件
                Dispatch btFormats = btApp.getProperty("Formats").getDispatch();
                //调用模板,bo.getTemplatePath()方法(获取模板路径)自己定义
                Dispatch btFormat = Dispatch.call(btFormats, "Open", bo1.getTemplatePath(), false, "").toDispatch();
                //传递参数,参数名称要和Bartender中设置的名称一样,不然会失败,bo1是打印对象
                //客户料号
                Dispatch.call(btFormat, "SetNamedSubStringValue", "Up", bo1.getUp());
                //日期 一位年
                Dispatch.call(btFormat, "SetNamedSubStringValue", "Down", bo1.getDown());
                //Dispatch.call(btFormat, "PrintSetup", "\\printserver\\TSC MF3400");
                //页面设置,不设置时以模板默认
//                Dispatch pageSetup = Dispatch.get(btFormat, "PageSetup").toDispatch();
//                Dispatch.put(pageSetup, "LabelRows", 2);    //行数
//                Dispatch.put(pageSetup, "LabelColumns", 1); //列数
//
//                //设置打印份数和序列号,不设置已模板默认
                Dispatch printSetup = Dispatch.get(btFormat, "PrintSetup").toDispatch();
                Dispatch.put(printSetup, "NumberSerializedLabels", bo1.getNumberSerializedLabels());//打印序列号
                 Dispatch.put(printSetup, "IdenticalCopiesOfLabel", 1);  //打印份数
                //打印,Bartender会自动选择模板中设置的打印机打印
                Dispatch.call(btFormat, "PrintOut",false,false);
                //Dispatch.call(btFormat,"PrintOut",false,false);
                //打印完成,关闭模块控件
                Dispatch.call(btFormat, "Close", 0);
                //关闭Bartender进程
                Dispatch.call(btApp, "Quit", 0);
            }
            //释放资源
            ComThread.Release();
        }

    }
}

PrintLabelHuaqin是自己的普通实体类,看个人需求类中需要存储什么信息。

如有打印不出来以及打印有问题设置打印机,调整bartender与模版即可。