调用方法:
downPDF3($(".bodyPortraitCon"),"案件报告");
pdfDown.js
//分页导出PDF文档,解决页面图片显示不全的问题
function downPDF3(select,fileName) {
let export_content = $(select);
let copyDom = $('<div/>');
copyDom.addClass('super');
copyDom.width(export_content.width() + 'px');
copyDom.height(export_content.height() + 'px');
$('body').append(copyDom);
let cont = document.getElementById('export_content');
html2canvas(export_content, {
onrendered: (canvas) => {
let cW = canvas.width; // 955
let cH = canvas.height; // 2965
// 一页pdf显示html页面生成的canvas高度;
let pageH = cW / 592.28 * 841.89; // 1357.4744208820155
//如果当前的pdf大于10页,那么必须要分割处理,不然canvas是没法获取到二进制字节流的
let pdf = new jsPDF('', 'pt', 'a4');
let imgW = 595.28;
//第一步:获取当前页面的长度具体有几个range页
let length = Math.ceil(cH/(pageH));
//第二步:循环处理每个2页块
for(let i=0;i<length;i++){
console.log("p"+i)
let height = pageH;
if(i==(length-1)){
height = cH-(pageH*i);
}
let ctx = canvas.getContext('2d');
let cutImage = ctx.getImageData(0,pageH*i,cW,height);
let pageData = createNewCanvas(cutImage,cW,height);
if(!pageData) console.log("error")
// 未生成pdf的html页面高度
let leftH = height; // 2965
// a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
let imgH = 592.28 / cW * height;
// 有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
if (leftH < pageH) {
pdf.addImage(pageData, 'JPEG', 0, 0, imgW, imgH);
}else {
pdf.addImage(pageData, 'JPEG', 0, 0, imgW, imgH);
pdf.addPage();
}
}
pdf.save(fileName+'.pdf');
},
background: '#fff'
});
}
/**
* 截取canvas绘图
* @param content
* @param width
* @param height
* @returns
*/
function createNewCanvas(content,width,height){
let nCanvas = document.createElement('canvas');
let nCtx=nCanvas.getContext('2d');
nCanvas.width=width;
nCanvas.height=height;
nCtx.putImageData(content,0,0);
let data = nCanvas.toDataURL('image/jpeg', 1.0);
nCtx.clearRect(0,0,width,height);
return data;
}