实现思路:在body中加一个div与vue入口接口app同级作为打印部分的根节点,打印的时候,将需要打印的部分截取放入div中,这时候需要用到css进行处理
@media print {
#app {
display: none;
.printTemplate {
display: block;
position: absolute;
left: 50%;
transform: translateX(-50%);
通过媒体查询,监听print事件,然后隐藏app,这时候页面上只剩下需要打印的部分。
并且这段样式不会让页面元素隐藏,只会生效在打开的打印窗口上,用户无感知
const printTemplate = document.getElementsByClassName("printTemplate")[0];
if (printTemplate) {
document.body.removeChild(printTemplate);
try {
var dom = document.getElementsByClassName("printContent")[0].innerHTML;
var newDom = document.createElement("div");
newDom.className = "printContent printTemplate";
newDom.innerHTML = dom;
document.body.appendChild(newDom);
window.print();
} catch (e) {
console.log(e);
为了保证样式生效,打印部分的样式应该单独写在html文件里面
以上就是我的两种思路,亲测有效,如果有用就点个赞呗!!!
/* eslint-disable */
const Print = function (dom, options) {
if (!(this instanceof Print)) return new Print(dom, options);
this.options = this.extend({
'noPrint': '.no-print'
}, options);
if ((typeof dom) ===
解决打印多页只出现一页问题
由于打印插件存在问题,如果打印文件超出一页,只显示一页,所以我们需要修改print.js源文件,所以只能手动下载vue-print.js到本地,做一些修改,然后引入到项目中,不能使用npm安装
下载 print.js
https://github.com/zxc19890923/print/blob/master/print.js
在src目录下面创建plugins/pri