说下心得自己一个人搞了很久,终于自己搞出来了。在这过程中知道了资源有多难找,希望大家能能够轻松一些。
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与模版即可。