【Vue】vue2导出页面内容为pdf文件,自定义选中页面内容导出为pdf文件,打印选中页面内容,预览打印内容
创始人
2024-05-31 21:49:51
0

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、安装html2canvas和jspdf
  • 二、导出pdf使用步骤
    • 1.在utils文件夹下创建htmlToPdf.js
    • 2.在main.js中引入
    • 3.在页面中使用
  • 三、打印预览
    • 1. 引入print-js
    • 2.页面中import
    • 3. 点击方法
  • 总结
  • 弹出打印框的另一种方式


前言

提示:这里可以添加本文要记录的大概内容:

打印页面中显示的部分内容,由div包括的所有内容都将被导出为pdf文件


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装html2canvas和jspdf

npm install --save html2canvas;
npm install --save jspdf

二、导出pdf使用步骤

1.在utils文件夹下创建htmlToPdf.js

在这里插入图片描述

代码如下(示例):

// htmlToPdf.js
// 导出页面为PDF格式
/* 用法
1. main.js中引入
import htmlToPdf from '@/util/htmlToPdf'
Vue.use(htmlToPdf)2. vue页面中调用
按钮中方法  @click="getPdf()"
data中声明变量 
data() {return {htmlTitle: "测试导出文件", // 生成pdf的名称 ......
3. 打印内容 id必须为pdfDom
*/ import html2Canvas from 'html2canvas' import JsPDF from 'jspdf' export default {install(Vue, options) {Vue.prototype.getPdf = function() {var title = this.htmlTitle //html2Canvas(document.querySelector('#pdfDom'), {allowTaint: true,taintTest: false,useCORS: true,// y: 72, // 对Y轴进行裁切// width:1200,// height:5000,dpi: window.devicePixelRatio * 4, //将分辨率提高到特定的DPI 提高四倍scale: 4 //按比例增加分辨率 }).then(function(canvas) {let contentWidth = canvas.widthlet contentHeight = canvas.heightlet pageHeight = contentWidth / 592.28 * 841.89let leftHeight = contentHeightlet position = 0let imgWidth = 595.28let imgHeight = 592.28 / contentWidth * contentHeightlet pageData = canvas.toDataURL('image/jpeg', 1.0)let PDF = new JsPDF('', 'pt', 'a4')if (leftHeight < pageHeight) {PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)} else {while (leftHeight > 0) {PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)leftHeight -= pageHeightposition -= 841.89if (leftHeight > 0) {PDF.addPage()}}}PDF.save(title + '.pdf')})}} }

2.在main.js中引入

代码如下(示例):

import htmlToPdf from './utils/htmlToPdf.js'
Vue.use(htmlToPdf)

在这里插入图片描述

3.在页面中使用

页面内容代码


2023年3月10日11:40:12

测试结束

导出文件查看打印效果

css样式

.tableBox {margin: 0 auto;width: 750px;display: flex;justify-content: center;align-items: center;flex-direction: column;padding: 20px;border: 1px solid #3399cc;h1 {text-align: center;}.el-table {margin: 20px 0;}
}
.onBtn{margin: 30px auto;display: flex;align-items: center;justify-content: center;
}

js变量

htmlTitle: "测试导出文件", // 生成pdf的名称 
tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'
}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄'
}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄'
}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄'
}]

在这里插入图片描述

  • getPdf方法为htmlToPdf.js中创建的,并且已经在main.js中引用为全局

  • data变量里面必须自定义一个title名称,要与js中相对应。
    在这里插入图片描述
    在这里插入图片描述

  • 导出内容div里面必须定义id,必须一致
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三、打印预览

1. 引入print-js

npm install --save print-js

2.页面中import

import printJS from 'print-js'
import html2Canvas from 'html2canvas'

在这里插入图片描述

3. 点击方法

首先要在打印内容中加一个ref绑定
在这里插入图片描述
在这里插入图片描述

goPrint() {this.isPrint = truehtml2Canvas(this.$refs.print, {allowTaint: true,taintTest: false,useCORS: true,dpi: window.devicePixelRatio * 4,scale: 4}).then((canvas) => {const url = canvas.toDataURL()printJS({printable: url, // 要打印的idtype: 'image',style: '@page{size:auto;margin: 0cm 1cm 0cm 1cm;}' //去除页眉页脚})this.isPrint = false})
}

总结

完整页面代码


弹出打印框的另一种方式

下载安装

npm install --save vue-print-nb

main.js引入

// vue打印插件 vue-print-nb
import Print from 'vue-print-nb'
Vue.use(Print)

用法
在这里插入图片描述
效果就是弹出浏览器自带的打印,与导出pdf文件是两码事
在这里插入图片描述

相关内容

热门资讯

安卓10系统有通知推送,畅享便... 你知道吗?最近安卓系统又升级啦!这次可是来到了安卓10系统,听说通知推送功能有了大变化,简直让人眼前...
安卓系统软件白屏,安卓系统软件... 手机屏幕突然变成了白茫茫的一片,这可怎么办?别急,今天就来和你聊聊安卓系统软件白屏这个让人头疼的问题...
美能达打印机安卓系统,轻松实现... 你有没有想过,家里的打印机也能玩转安卓系统?没错,今天就要给你揭秘这款神奇的美能达打印机,看看它是如...
平板安卓进不了系统,故障排查与... 最近是不是你也遇到了这样的烦恼:平板安卓系统突然进不去系统了?别急,让我来帮你分析一下可能的原因,并...
安卓内存小怎么安装系统,系统安... 你有没有遇到过这种情况:手机内存小,想安装个新系统,结果发现空间不够用?别急,今天就来给你支个招,让...
掌机安卓系统串流,便携式游戏新... 你有没有想过,在小小的掌机设备上也能享受到安卓系统的流畅体验?没错,这就是今天我要跟你分享的神奇世界...
冠道系统支持安卓,畅享智能生活... 你知道吗?最近冠道系统更新了,竟然支持安卓系统了!这可真是让人眼前一亮的大好事啊!想象你的安卓手机和...
安卓系统打开c语言文件,基于安... 你有没有遇到过这样的情况:手里拿着安卓设备,突然想看看那些神秘的C语言文件,却一头雾水,不知道从何下...
安卓系统程序卸载工具,优化手机... 手机里的安卓系统程序越来越多,是不是感觉内存不够用了?别急,今天就来给你安利几款特别实用的安卓系统程...
安卓旗舰系统怎么样,性能与创新... 你有没有发现,最近安卓旗舰系统的更新速度简直让人眼花缭乱?作为一个紧跟科技潮流的数码爱好者,我可是对...
安卓系统新闻推送屏蔽,轻松享受... 你是不是也和我一样,每天手机里充斥着各种新闻推送,有时候甚至感觉被信息淹没了?别急,今天就来聊聊如何...
安卓系统好的手机品牌,盘点热门... 你有没有想过,为什么你的手机总是卡得要命,而别人的手机却流畅得像风一样?这其中的奥秘,就在于手机的品...
笔录本怎么安装安卓系统,安装指... 你有没有想过,你的笔录本也可以变身成安卓小能手呢?没错,就是那个我们日常使用的安卓系统,它现在也能在...
电脑台式双系统安卓,安卓与Wi... 你有没有想过,你的电脑台式机除了Windows系统,还能装个安卓系统?听起来是不是有点酷炫?没错,现...
安卓系统程序运行入口,启动流程... 你有没有发现,每次打开安卓手机,那些熟悉的图标就像小精灵一样跳出来,召唤你进入它们的奇妙世界?这就是...
安卓系统安装ehr移动服务,安... 你有没有想过,手机里的安卓系统竟然能帮你安装那种高大上的EHR(电子健康记录)移动服务呢?没错,就是...
安卓系统可以不用升级吗,也能畅... 你有没有想过,你的安卓手机是不是真的需要每次都升级呢?是不是有时候心里痒痒的,想看看新系统带来的新鲜...
怎样把安卓换成苹果系统,从安卓... 你有没有想过,把你的安卓手机换成苹果系统呢?想象那流畅的操作体验,那独特的iOS设计,是不是让你心动...
怎样把苹果导入安卓系统,探索将... 你有没有想过,把苹果手机里的宝贝照片、音乐、视频这些宝贝转移到安卓手机上呢?这可不是什么难事,只要跟...
安卓8.0系统设备支持,系统升... 你知道吗?最近安卓系统又升级啦!这次可是来到了安卓8.0的版本,听说支持了不少新设备呢。你是不是也好...