置信你看了 【vue-plugin-hiprint】应用-进阶篇 曾经晓得了模板对象构造
,如何查看可用API
。本打印篇
将解说打印相干API
及注意事项
。
源码链接: https://github.com/CcSimple/vue-plugin-hiprint-start
成果如下:
1.前言
首先咱们应该分明两种打印模式
:
- 拖拽
生成的html
,创立iframe
而后调用浏览器
提供的print
API - 将
生成的html
,通过socket.io
发送到间接打印客户端
再调用electron
提供的print
API
提供的打印 API
如下:
- 浏览器打印:
- 模板对象:
print
、printByHtml
- hiprint对象:
print
- 借助打印客户端:
- 模板对象:
print2
、printByHtml2
- hiprint对象:
print2
其中 hiprint对象提供的print
、print2
实用于多模板打印;模板对象实用于单/多面板
打印。
2 填充数据
对于填充数据/数据源
的问题,很多小伙伴都问过我。先看一张图:
如上图,其中打印设计时指的就是设计器
区域。设置字段名即可在调用 print
、print2
、getHtml
时填充对应的数据。如果不想显示冒号:
(题目:数据)这种,设置参数 hideTitle:true
即可。
上代码:
let printData = {name:'打印/预览时显示的名称'};let hiprintTemplate = new hiprint.PrintTemplate({xxx});// 弹出浏览器打印窗口,并填充 字段名:name 的元素hiprintTemplate.print(printData);let hiprintTemplate2 = new hiprint.PrintTemplate({xxx});// hiprint对象打印hiprint.print({ templates: [ { template: hiprintTemplate, data: printData }, { template: hiprintTemplate2, data: printData }, ],});
OK,看了下面的外围代码
及形容
,置信你曾经很分明如何填充数据
了。
3 获取预览html
预览性能
其实是拿到生成的html
而后去渲染。所以getHtml
是须要先填充数据
的。
示例:
let printData = {name:'名称1'};let hiprintTemplate = new hiprint.PrintTemplate({xxx});// printData 如果是数组,那就是批量预览了let html = hiprintTemplate.getHtml(printData);// 渲染htmlconsole.log(`"$('#preview_content').length : "`, $('#preview_content').length);$('#preview_content').html(html);
预览
就是这么简略的,然而也须要留神:
如果你是弹窗预览
,那么肯定要先可能获取到 $('#preview_content') 这个容器才行哟。
4 浏览器打印
对于浏览器打印
,因为各家浏览器内核
不一样。打印成果有所不一
。这里默认应用的是 Microsoft Edge 基于Chromium
。
经测试 基于Chromium
的浏览器可失常打印。如:Edge、Chrome 等。
上代码:
let printData = {name:'名称1'};let printData2 = {name:'名称2'};let hiprintTemplate = new hiprint.PrintTemplate({xxx});// 打印hiprintTemplate.print(printData);// 批量打印hiprintTemplate.print([printData,printData2]);
浏览器打印更多参数
:
// printData 为数组 就是 批量打印hiprintTemplate.print(printData, { // 将覆盖面板偏移设置 leftOffset: -10, // 左偏移 topOffset: -10 // 上偏移 }, { callback: () => { // 无奈监听, 用户是否点击了 打印/勾销 按钮 console.log('浏览器打印窗口已关上') }, styleHandler: () => { // 这里拼接成放html->head标签内的css/style // 1.例如:应用hiprin官网的款式 let css = '<link href="http://hiprint.io/Content/hiprint/css/print-lock.css" media="print" rel="stylesheet">' // 2.重写款式:所有文本红色 css += '<style>.hiprint-printElement-text{color:red !important;}</style>' return css }});
因为打印原理
是生成html
调用浏览器打印。所以如果批量打印
传的数据过多
会造成浏览器卡死/等待时间长
等问题。
5 间接打印
间接打印
其实就是将填充完数据的html
通过socket.io
连贯发送到间接打印客户端
打印客户端源码:https://github.com/CcSimple/electron-hiprint
5.1 获取打印机列表
间接打印
能够指定打印机
;同时本客户端也提供了一些其余Api
;详见源码。
默认当网页关上时
--在jQuery
的 $(document).ready 时去主动连贯
打印客户端。所以如果你是先关上网页
,再去关上打印客户端
,那么你须要刷新网页
,或者应用命令从新连贯
。
判断是否连贯及从新连贯:
// 判断是否已胜利连贯if (hiprint.hiwebSocket.opened) { // 留神: 连贯是异步的 // 已连贯}// 从新连贯客户端 当然你能够去连贯局域网内的客户端hiprint.hiwebSocket.setHost("http://localhost:17521")
获取打印机列表:
// 模板对象获取const printerList = hiprintTemplate.getPrinterList();// hiprint对象获取const list = hiprint.hiwebSocket.getPrinterList();
留神:这样获取的是连贯胜利时
本机的打印机列表
从新/刷新
获取打印机列表:
// 这是异步的hiprint.refreshPrinterList((list) => { console.log('refreshPrinterList') console.log(list)});
5.2 打印
let printData = {name:'名称1'};let printData2 = {name:'名称2'};let hiprintTemplate = new hiprint.PrintTemplate({xxx});// 间接打印 将应用零碎设置的 默认打印机hiprintTemplate.print2(printData);// 批量间接打印hiprintTemplate.print2([printData,printData2]);// 间接打印回调// 发送工作到打印机胜利hiprintTemplate.on('printSuccess', function (e) {})// 发送工作到打印机失败hiprintTemplate.on('printError', function (e) {})
因为客户端原理一样是须要先渲染html
,所以批量打印
传的数据过多
会造成客户端卡死/等待时间长
等问题。 所以倡议应用队列模式
进行批量打印
。
间接打印更多参数
:
// printData 为数组 就是 批量打印hiprintTemplate.print2(printData, { // 将覆盖面板偏移设置 leftOffset: -10, // 左偏移 topOffset: -10 // 上偏移});// 指定打印机 或 参数hiprintTemplate.print2(printData, { printer: “”, // 打印机 名称 title: "打印工作名称", color: false, // 是否打印色彩 默认 true copies: 1, // 打印份数 默认 1});
其余参数可查看源码https://github.com/CcSimple/electron-hiprint
6 多模板预览/打印
有了后面两节
的根底,多模板打印
也就很容易了解了。
示例:
let printData = {name:'名称1'};let printData2 = {name:'名称2'};let hiprintTemplate = new hiprint.PrintTemplate({xxx});let hiprintTemplate2 = new hiprint.PrintTemplate({xxx});// 多模板预览hiprint.getHtml({ templates: [ { template: hiprintTemplate, data: printData }, { template: hiprintTemplate2, data: printData2 }, ],});// 多模板打印hiprint.print({ templates: [ { template: hiprintTemplate, data: printData }, { template: hiprintTemplate2, data: printData2 }, ],});// 多模板间接打印hiprint.print2( { templates: [ { template: hiprintTemplate, data: printData, options: {} }, { template: hiprintTemplate2, data: printData2 }, ], options: { printer: "", landscape: true }, }, function (data) { console.log("printSuccess"); }, function (e) { console.log("printError"); });
代码一看,霎时明了。
总结
- 须要了解
打印原理
,有问题能力晓得大略出在哪 - 须要
联合关键字去摸索
相干API的更多可能
- 整篇下来难点并不多,老手们须要
多多摸索
打印篇
到此结束,如有不分明的知识点,大家肯定要学会本人查阅相干材料
。
欢送各位码友转发
及留言反馈
,感觉不错就点个赞
再走咯~