2 //给自己需要导出的ui部分.定义id为"pdfDom".此部分将就是pdf显示的部分
3
4
复制代码
复制代码
1 export default {
2 data () {
3 return {
4 htmlTitle: '页面导出PDF文件名'
5 }
6 }
7 }
复制代码
到这里大家会发现功能是可以实现了,但是会有个致命的问题,导出来的pdf打印出来还是比较模糊的,那么,针对这个问题,我们要怎么解决呢?
我们的思路是:将canvas的属性width和height属性放大为2倍,最后将canvas的css样式width和height设置为原来1倍的大小即可,也就是,先将canvas高分辨率输出,再来压缩导出打印,即可,废话不多说,完整代码如下:
复制代码
1 // 导出页面为PDF格式
2 import html2Canvas from 'html2canvas'
3 import JsPDF from 'jspdf'
4 export default{
5 install (Vue, options) {
6 Vue.prototype.getPdf = function (dom,title) {
7 var title = title
8 var c = document.createElement("canvas")
9 var opts = {
10 scale: 2,
11 canvas: c,
12 logging: true,
13 width: document.querySelector(dom).width,
14 height: document.querySelector(dom).height
15 };
16 c.width = document.querySelector(dom).width * 2
17 c.height = document.querySelector(dom).height * 2
18 c.getContext("2d").scale(2, 2);
19 html2Canvas(document.querySelector(dom), opts).then(function (canvas) {
20 let contentWidth = canvas.width
21 let contentHeight = canvas.height
22 let pageHeight = contentWidth / 592.28 * 841.89
23 let leftHeight = contentHeight
24 let position = 0
25 let imgWidth = 595.28
26 let imgHeight = 592.28 / contentWidth * contentHeight
27 let pageData = canvas.toDataURL('image/jpeg', 1.0)
28 let PDF = new JsPDF('', 'pt', 'a4')
29 if (leftHeight < pageHeight) {
30 PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
31 } else {
32 while (leftHeight > 0) {
33 PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
34 leftHeight -= pageHeight
35 position -= 841.89
36 if (leftHeight > 0) {
37 PDF.addPage()
38 }
39 }
40 }
41 PDF.save(title + '.pdf')
42 }
43 )
44 }
45 }
46 }https://www.cnblogs.com/jsonYoung/p/9806903.html
