前端:ant design vue 1.6.2
JSPDF版本:2.3.0
问题:在搭配html2canvas截取页面div中内容作为图片,导出 PDF过程中,
当页面滚动条在最顶端时,可以正常获取截图保存PDF,
当滚动条下拉后,截图内容会有偏移,截图尺寸正常,存放的pdf的位置正常,但是截图区域不正常,上半部分有空白填充,并将实际需求截图位置往下挤,导致实际需求位置被挤出截图尺寸
具体代码如下:
downloadPDF() {
const downPdf = document.getElementById('KPImounth') // KPImounth为截图区域div的id
html2canvas(downPdf).then((canvas) => {
const image = canvas.toDataURL('image/jpeg', 1.0)
const doc = new jsPDF('l', 'px', 'a4')
const pageWidth = doc.internal.pageSize.getWidth()
const pageHeight = doc.internal.pageSize.getHeight()
const widthRatio = pageWidth / canvas.width
const heightRatio = pageHeight / canvas.height
const ratio = widthRatio > heightRatio ? heightRatio : widthRatio
const canvasWidth = canvas.width * ratio
const canvasHeight = canvas.height * ratio
const marginX = (pageWidth - canvasWidth) / 2
const marginY = (pageHeight - canvasHeight) / 2
doc.addImage(image, 'JPEG', marginX, marginY, canvasWidth, canvasHeight)
doc.output('dataurlnewwindow')
doc.save('pdfname' + '.pdf')
})
},
其实可以考虑, 在转canvas之前先把原始dom复制一份,把z-index改成负的不可见, 这样就不会存在 滚动条下拉后错位, 如果有细节调整,也可以在复制的这份dom上面操作