前端调用BarTender接口实现动态数据打印

1,803 阅读3分钟

关于软件的安装、注册包括购买,可以查看官网,由于网上这方面教程不多,在我上次实现后,特意找时间记录下来,方便以后使用,本篇文章是参考 Bartender Http方式调用打印之后的补充,关于安装下载的内容也可以参考这篇文章。

模板配置

1. 这里打开BarTender软件,新建一个空白文档(这里的参数根据打印机和纸张配置,如果不知道可以先随便配置,后面再改)。
2. 创建文本,这里先随便创建一个。image.png
3. 切换数据输入表单,在上方工具栏选择“查看”->“数据输入表单”image.png

image.png

4. 添加“具名数据源”

在左侧“具名数据源”点击右键“创建具名数据源”,类型选择“嵌入的数据”image.png

5. 添加控件

这里先选择一个文本输入框image.png

6. 配置模板对象数据源

双击刚刚添加的文本输入框,在“链接数据源”中选择第四步创建的具名数据源image.png在具名数据源下面还有一个模板对象数据源,这里就是刚刚第二步创建的文本框,点击选择。

至此一个简单的动态数据配置就已经完成了,总结一下思路:
  在第二步创建了文本框,这个是和打印显示效果样式有关的,我们可以在工具栏“查看”->“模板设计”中切换回去。
  第二至第五步是创建一个可用于输入的“文本框”,这里的所有操作都不会直接显示在打印效果中,可以把这一步理解成收集数据。
  第六步就是把收集的数据和打印效果连接起来。

检验配置是否正确

可以使用打印预览功能测试配置有没有问题, image.png image.png image.png 在输入框输入123456后,预览显示的和输入框一样说明配置没有问题。

调用接口

文档地址:http://localhost/Bartender/swagger/index.html

接口调用
地址:{host}/Bartender/api/v1/print
参数说明
名称类型注释
libraryIDstring模板库ID
relativePathstring模板相对路径
AbsolutePathstring模板绝对路径
Printerstring打印机名称
DataEntryControlsObject打印模板配置参数

DataEntryControls 里面的值取决于模板配置的具名数据源,下面是根据上方配置的例子

const config = {
  "libraryID": "bdca1bf2-59f1-42b5-8818-ded167f4ca6c",
  "relativePath": "Automotive/AIAG/B-10/TLC39 MicroPDF Laser_53_rf1.btw",
  "AbsolutePath": "C:\inetpub\wwwroot\BarTender\wwwroot\Templates\Automotive\AIAG\B-10\TLC39 MicroPDF Laser_53_rf1.btw",
  "Printer": "ZDesigner ZD421CN-300dpi ZPL",
}
const DataEntryControls = {
    test1:'hello'
}
request({method: "post", url:"http://localhost/Bartender/api/v1/print", data: {...config, DataEntryControls}}).catch(err => {
  if(!err?.response?.data) throw new Error("打印服务返回错误!")
  const {printRequestID} = err.response.data

  request({method: "post", url:"http://localhost/Bartender/api/v1/print", data: {...config, DataEntryControls, printRequestID}}).then(res => {
    console.log({msg: "打印成功", data: res.data})
  }).catch(err => {
    console.log({msg: "打印失败", data: err.response.data})
  })
})

DataEntryControls中的test1就是配置具名数据源的名称。

重复的请求

在上面的例子中,我调用了两次request方法,在request中又调用了一次,这是因为BarTender的接口要求,在第一次调用的时候,BarTender会返回错误,并返回printRequestID,我们需要在第二次请求的时候把这个参数加上,这样打印才会生效。