1、需要下载这两个插件
npm i html2canvas --save
npm i jspdf --save
2、使用
import { getPdf } from "@/widget/pdf.js";
<div class="box_content" id="pdf">
//内容写在这里面
</div>
handleExport(name) {
printOut('pdf',name)
}
3、创建一个pdf.js文件
import html2Canvas from "html2canvas";
import JsPDF from "jspdf";
import { Loading } from "element-ui";
import axios from "axios";
import { getToken } from "@/server/auth";
export const getPdf = (DomName, name) => {
DomName = document.getElementById(DomName)
console.log("正在帮您导出......");
window.pageYoffset = 0;
document.documentElement.scrollTop = 0;
document.body.scrollTop = 0;
var title = name;
var that = this;
var shareContent = DomName;
console.log(shareContent,'shareContent');
var width = shareContent.offsetWidth;
var height = shareContent.offsetHeight;
var canvas = document.createElement("canvas");
var scale = 2;
canvas.width = width * scale;
canvas.height = height * scale;
canvas.getContext("2d").scale(scale, scale);
html2Canvas(DomName, {
useCORS: true,
dpi: window.devicePixelRatio ,
}).then(function(canvas) {
var context = canvas.getContext("2d");
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
var imgData = canvas.toDataURL("image/", 1.0);
var img = new Image();
img.src = imgData;
img.onload = function() {
img.width = img.width / 2;
img.height = img.height / 2;
img.style.transform = "scale(0.5)";
if (this.width > this.height) {
var doc = new JsPDF("l", "mm", [
this.width * 0.555,
this.height * 0.555
]);
} else {
var doc = new JsPDF("p", "mm", [
this.width * 0.555,
this.height * 0.555
]);
}
doc.addImage(
imgData,
"jpeg",
10,
0,
this.width * 0.505,
this.height * 0.545
);
doc.save(title + ".pdf");
console.log("倒数3秒导出啦");
};
});
var pdfDataBase64 = pdf.output("datauristring");
let file = dataURLtoFile(pdfDataBase64, name);
saveFile(file,name)
};
});
};
function dataURLtoFile(dataurl, filename) {
let arr = dataurl.split(",");
let mime = arr[0].match(/:(.*?);/)[1];
let suffix = mime.split("/")[1];
let bstr = atob(arr[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], `${filename}.${suffix}`, {
type: mime
});
}
function saveFile(file,newObj){
let formdata = new FormData();
for(var key in newObj){
formdata.append(key, newObj[key]);
}
formdata.append("file", file);
let actionUrl ='/api/add'
let headers = {
Authorization: "Bearer " + getToken()
};
axios
.post(actionUrl, formdata, {
headers: headers
})
.then(res => {})
.catch(error => {});
}
export const getPdf2 = (element, name, _this) => {
var width = element.offsetWidth / 1.5;
var height = element.offsetHeight / 1.5;
const opts = {
scrollY: 0,
scrollX: 0,
dpi: 900,
scale: 2,
useCORS: true
};
html2Canvas(element, opts).then(canvas => {
var context = canvas.getContext("2d");
context.mozImageSmoothingEnabled = false;
context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
var pageData = canvas.toDataURL("image/jpeg", 1.0);
var img = new Image();
img.src = pageData;
img.onload = () => {
img.width = img.width / 2;
img.height = img.height / 2;
img.style.transform = "scale(1)";
if (width > height) {
var pdf = new JsPDF("l", "mm", [width * 0.505, height * 0.505]);
} else {
var pdf = new JsPDF("p", "mm", [width * 0.505, height * 0.505]);
}
pdf.addImage(pageData, "jpeg", 0, 0, width * 0.505, height * 0.505);
const fileName = `${name}.pdf`
pdf.save(fileName)
_this.$loading.hide()
};
});
};
import { getPdf2 } from '@/assets/js/pdf'
<div class="box_content" ref="pdf"></div>
handleExport() {
this.$loading.show({ tip: '正在生成报告请稍候...' })
setTimeout(() => {
getPdf2(this.$refs.pdf,'报告名称', this)
this.comeback()
}, 1000)
},