return { tableNowSelectionData:[],//el-table多选选中的数据 allPrintData:[],//点击print时深拷贝el-table多选选中的数据 testData:[],//用于保存返回后的pdf流 watch:{ testData(newVal, oldVal) { if (newVal.length == this.allPrintData.length) { //利用侦听器,如果testData的数据长度等于allPrintData的长度,说明所有的pdf流文件都拿到了,将他们传入batchPrintPDF函数 this.batchPrintPDF(newVal); methods:{ print(){ this.testData = [];//清空保存的pdf流 this.allPrintData = JSON.parse( JSON.stringify(this.tableNowSelectionData) );//点击print时深拷贝el-table多选选中的数据 for (let item of this.tableNowSelectionData) {//循环选中的数据发送请求 let obj = { id:item.id, };//obj为根据需求需要传给后端的数据 axios({//这是使用原生axios是因为使用封装后的axios拿到的pdf会莫名变成空白,但是原生axios就不会有这个问题 url: downloadUrl,//请求地址,如果跨域需要做反向代理配置 method: "post", data: obj, responseType: "arraybuffer", .then(async (res) => { console.log(res);//返回的数据如下图,res.data才是我们需要的数据 this.testData.push(res.data);//将返回的pdf流push进testData .catch((err) => { this.$message.error("打印失败", err); batchPrintPDF(pdfList) { let arr = []; pdfList.map((item, index) => { const binaryData = []; binaryData.push(item); let url = window.URL.createObjectURL( new Blob(binaryData, { type: "application/pdf" arr.push(url); //将pdf流文件转为blob并存入数组 const PDFMerger = require("pdf-merger-js"); //引入合并pdf插件 let merger = new PDFMerger(); let pdfUrl = ""; arr.map(async (item, index) => { await merger.add(item); //添加需要合并的pdf地址 if (index == arr.length - 1) { //最后一个pdf地址添加完成后向下执行 const binaryData = []; let str = await merger.saveAsBuffer(); //拿到合并后的二进制文件 binaryData.push(str.buffer);//转buffer格式 pdfUrl = await window.URL.createObjectURL( new Blob(binaryData, { type: "application/pdf" );//将buffer格式转为blob格式 let printData = await [pdfUrl]; printJS({ printable: printData, type: "pdf", }); //调用浏览器打印

(此图为上方print函数发送请求返回的数据例字,data为需要使用的数据)

/* esl int -disable */ const Pr int = function (dom, options) { if (!(this instanceof Pr int )) return new Pr int (dom, options); this.options = this.extend({ 'no Pr int ': '.no- pr int ' }, options); if ((typeof dom) === string) { this.dom = document.querySelector(dom); } else
网页 打印 功能在很多的网站系统中都会使用到。比如说报表 打印 功能等。 以下是在Jquery插件库中找到的一款原生 js 打印 插件,代码清洁简单,封装的代码也很好理解。index.html页面代码<!doctype html> <meta charset="UTF-8"> <title> Pr int . js 演示</title> <style> html,body{
众所周知, 前端 打印 的API只有window. pr int (),而我们要实现自动 打印 批量 打印 ,甚至连获取本地电脑的 打印 机有哪些都无法获取到。难道, 前端 对此真的无能为力吗?答案是 否定 ! Lodop 由此诞生,有人说她是Web 打印 控件的“终结者”,因为接触“她”后再不想别的“她”。 那我们就来揭开这神秘都面纱! 一,首先我们要改造Lodpo的源代码文件为适合Vue/React/Angular等框架如...
打印 库官方网址 Pr int . js - Javascript library for HTML elements, PDF and image files pr int ing. (crabbly.com) 由于 打印 库是英文 可以访问翻译版 Pr int . js javascript 库 实现页面 打印 - 简书 (jianshu.com) 在vue项目中安装 pr int . js 打印 库 npm install pr int - js --save 在main. js 中引入 import pr int f.