- npm i html2canvas
- npm i jspdf
- 创建一个js文件
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
const htmlPdf = {
getPdf(title, html) {
html2Canvas(html, {
allowTaint: false,
taintTest: false,
logging: false,
useCORS: true,
dpi: window.devicePixelRatio * 4,
scale: 4,
}).then((canvas) => {
const pdf = new JsPDF('p', 'mm', 'a4')
const ctx = canvas.getContext('2d')
const a4w = 190
const a4h = 200
const imgHeight = Math.floor((a4h * canvas.width) / a4w)
let renderedHeight = 0
while (renderedHeight < canvas.height) {
const page = document.createElement('canvas')
page.width = canvas.width
page.height = Math.min(imgHeight, canvas.height - renderedHeight)
page
.getContext('2d')
.putImageData(
ctx.getImageData(
0,
renderedHeight,
canvas.width,
Math.min(imgHeight, canvas.height - renderedHeight)
),
0,
0
)
pdf.addImage(
page.toDataURL('image/jpeg', 1.0),
'JPEG',
10,
10,
a4w,
Math.min(a4h, (a4w * page.height) / page.width)
)
renderedHeight += imgHeight
if (renderedHeight < canvas.height) {
pdf.addPage()
}
}
pdf.save(`${title}.pdf`)
})
},
}
export default htmlPdf
页面在调用这个方法就可以了
<template>
<div class="main">
<div>1af4sa4fadiv>
<div>dsasafsa4fsdiv>
<van-image width="100" height="100" src="https://img01.yzcdn.cn/vant/cat.jpeg" />
div>
template>
<script>
import htmlPdf from '@/utils/htmlPdf'
export default {
methods: {
handelFun() {
htmlPdf.getPdf('导出pdf', document.querySelector('.main'))
},
},
}
script>
不走下载,转为base64传给后端
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
const htmlPdf = {
getPdf(title, html) {
return new Promise((resolve) => {
html2Canvas(html, {
allowTaint: false,
taintTest: false,
logging: false,
useCORS: true,
windowWidth: '1000px',
dpi: window.devicePixelRatio * 3,
scale: 2,
}).then((canvas) => {
console.log(canvas)
const pdf = new JsPDF('p', 'mm', 'a4')
const ctx = canvas.getContext('2d')
console.log(ctx, 'ctx')
const a4w = 190
const a4h = 286
const imgHeight = Math.floor((a4h * canvas.width) / a4w)
let renderedHeight = 0
while (renderedHeight < canvas.height) {
const page = document.createElement('canvas')
page.width = canvas.width
page.height = Math.min(imgHeight, canvas.height - renderedHeight)
page
.getContext('2d')
.putImageData(
ctx.getImageData(
0,
renderedHeight,
canvas.width,
Math.min(imgHeight, canvas.height - renderedHeight)
),
0,
0
)
pdf.addImage(
page.toDataURL('image/jpeg', 1.0),
'JPEG',
10,
10,
a4w,
Math.min(a4h, (a4w * page.height) / page.width)
)
renderedHeight += imgHeight
if (renderedHeight < canvas.height) {
pdf.addPage()
}
}
const pdfData = pdf.output('datauristring')
resolve(pdfData)
})
})
},
}
export default htmlPdf
<template>
<div class="main">
<div>1af4sa4fadiv>
<div>dsasafsa4fsdiv>
<van-image width="100" height="100" src="https://img01.yzcdn.cn/vant/cat.jpeg" />
div>
template>
<script>
import htmlPdf from '@/utils/htmlPdf'
export default {
methods: {
handelFun() {
htmlPdf.getPdf('导出pdf', document.querySelector('.main')).then((res) => {
console.log('base64', res)
})
},
},
}
script>
一个标签代表一个pdf页面,for循环
handelFun() {
const arr = [
document.querySelector('.qwe'),
document.querySelector('.qwer'),
document.querySelector('.qwert'),
]
this.$toast.loading({
message: '加载中...',
forbidClick: true,
loadingType: 'spinner',
})
htmlPdf
.getPdf('导出pdf', arr)
.then((res) => {
const str = base64toFilePdf(res, '委托书')
this.arr.push(str)
})
.then(() => {
const formDatas = new FormData()
formDatas.append('file', this.arr[0])
formDatas.append('needInfo', 1)
formDatas.append('fileName', this.arr[0].name.split('.')[0])
formDatas.append('fileType', this.arr[0].name.split('.')[1])
formDatas.append('bucketName', 'content_bucket')
formDatas.append('token', 'a::A09AA21B1A2F42F7B2C3581339B0563C')
myUploadFile(formDatas)
.then((ress) => {
const data = JSON.parse(ress.data.data).url
this.upload(data)
console.log(data)
})
.catch((error) => {
this.$toast(error)
})
})
},
js文件
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
const htmlPdf = {
getPdf(title, html) {
return new Promise(async (resolve) => {
const pdf = new JsPDF('p', 'mm', 'a4')
for (let i = 0; i < html.length; i++) {
const canvas = await html2Canvas(html[i], {
allowTaint: false,
taintTest: false,
logging: false,
useCORS: true,
windowWidth: '1000px',
dpi: window.devicePixelRatio * 3,
scale: 2,
})
const ctx = canvas.getContext('2d')
const a4w = 190
const a4h = 286
const imgHeight = Math.floor((a4h * canvas.width) / a4w)
let renderedHeight = 0
while (renderedHeight < canvas.height) {
const page = document.createElement('canvas')
page.width = canvas.width
page.height = Math.min(imgHeight, canvas.height - renderedHeight)
page
.getContext('2d')
.putImageData(
ctx.getImageData(
0,
renderedHeight,
canvas.width,
Math.min(imgHeight, canvas.height - renderedHeight)
),
0,
0
)
pdf.addImage(
page.toDataURL('image/jpeg', 1.0),
'JPEG',
10,
10,
a4w,
Math.min(a4h, (a4w * page.height) / page.width)
)
renderedHeight += imgHeight
}
if (i + 1 === html.length) {
console.log(title)
const pdfData = pdf.output('datauristring')
resolve(pdfData)
} else {
pdf.addPage()
}
}
})
},
}
export default htmlPdf