赞
踩
插件git地址:https://github.com/CcSimple/vue-plugin-hiprint
npm install vue-plugin-hiprint
在public里面新建一个print-lock.css,用来存放相关css代码
css代码来源https://cdn.jsdelivr.net/npm/vue-plugin-hiprint@latest/dist/print-lock.css
然后在index.html里面加入如下代码(href后面跟上的是上面新建的css文件地址)
<link rel="stylesheet" type="text/css" media="print" href="<%= BASE_URL %>print-lock.css">
<template> <div> <el-button @click="print('test')">测试打印</el-button> </div> </template> <script setup> //定义一些打印相关的常量 可以通用 //打印左右边距 const printMinLeft = 5 //打印A4宽度px const a4Width = 595 //A4的panel设置 const a4Panel = {width: 210, height: 297, paperFooter: 340, paperHeader: 10} const headerColNum = 3//总列数 const titleHeight = 20//标题行高 const contentWidth = a4Width - printMinLeft * 2//内容宽度 //定义两个新建打印文本和打印表格列的方法,方便复用代码 //新字段元素:列索引,列数,行索引(从1开始) 中文名 字段名 const newPrintText = (col, colNum, row, title, field) => { return { options: { width: contentWidth / headerColNum * colNum, height: 20, fontSize: 10, top: titleHeight + 20 * row, left: contentWidth / headerColNum * (col - 1) + printMinLeft, type: 'text', title: title, field: field, } } } // 新列元素:中文名,字段名。相对宽度(建议1~10) const newPrintColumn = (title, field, width) => { return { title: title, field: field, width: width, colspan: 1, rowspan: 1, align: 'center', } } import {autoConnect, disAutoConnect, hiprint, defaultElementTypeProvider} from 'vue-plugin-hiprint' disAutoConnect()// 取消自动连接直接打印客户端 hiprint.init()//初始化 const print=title=>{ //定义需要打印的数据 let printData={ formNo:'F0001', operator:'张三', addDate:'2023-01-01', details:[] } for(let i=0;i<5;i++){ printData.details.push( { productNo:'P000'+i, productName:'测试产品'+i, num:0, unit:'个' }) } //定义模板和面板,所有打印元素都在面板上,默认A4纸大小 let hiprintTemplate = new hiprint.PrintTemplate(); let panel = hiprintTemplate.addPrintPanel(a4Panel); //文本标题 panel.addPrintText({ options: { width: 150, height: 20, top: 10, left: contentWidth / 2 - 30, fontSize: 20, title: '测试单据', type: 'text' } }) //头部内容 panel.addPrintText(newPrintText(1, 1, 1, '表单编号', 'formNo')) panel.addPrintText(newPrintText(2, 1, 1, '操作人', 'operator')) panel.addPrintText(newPrintText(3, 1, 1, '操作日期', 'addDate')) let tmpColumns = [] tmpColumns.push(newPrintColumn('产品编号', 'productNo', 3)) tmpColumns.push(newPrintColumn('产品名称', 'productName', 5)) tmpColumns.push(newPrintColumn('数量', 'num', 1)) tmpColumns.push(newPrintColumn('单位', 'unit', 1)) panel.addPrintTable({ options: { width: a4Width - printMinLeft * 2, top: 80, left: printMinLeft, field: 'details', columns: [tmpColumns] } }) //打印 hiprintTemplate.print(printData); } </script>
title属性一般都是默认文本
field属性一般都是绑定数据的字段名称
如果需要打印条形码或者二维码,也是用addPrintText方法,只是options的参数textType使用“barcode”(条形码)或者“qrcode”(二维码)即可。
如果需要打印html则可以使用addPrintHtml方法。
其他特殊打印形状参考http://hiprint.io/docs/text
简单的自定义打印,也可以通过存储元素的top和left属性,确认元素位置,实现简单的自定义打印。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。