首先安装插件html2canvas。 在renderjs中使用这个插件,因为在app端无法直接使用。具体代码如下
<script module="render2" lang="renderjs">
import html2Canvas from 'html2canvas'
export default {
data() {
return {}
},
mounted() {},
methods: {
myprint(data) {
this.$ownerInstance.callMethod('showLoading');
const detail = document.querySelector("#content2PDF") //获取到html包含此页面的外层标签,detail为页面中需要导出为pdf的最外层标签的id名
const imgHeight = detail.clientHeight;
const imgWidth = detail.clientWidth;
html2Canvas(detail, { //对应的dom元素id(class也可以)
allowTaint: true, //是否允许跨域图像渲染画布
useCORS: true, //是否尝试使用 CORS 从服务器加载图像 解决图片跨域问题
}).then((canvas) => {
return new Promise((resolve, reject) => {
console.log(4);
setTimeout(() => {
console.log(5);
resolve(canvas)
}, 500)
}).then((canvas) => {
//生成的canvas实例
var contentWidth = canvas.width; //所选元素宽度
var contentHeight = canvas.height; //所选元素高度
//一页pdf显示html页面生成的canvas高度;
var pageHeight = contentWidth / 595.28 * 841.89;
//未生成pdf的html页面高度
var leftHeight = contentHeight;
//pdf页面偏移
var position = 0;
//a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
var imgWidth = 555.28;
var imgHeight = 555.28 / contentWidth * contentHeight;
var pageData = canvas.toDataURL('image/jpeg', 1.0); //转成jpg格式
this.$ownerInstance.callMethod('downPdf', pageData);
}).catch((r) => {
console.log(r);
this.$ownerInstance.callMethod('hideLoading');
})
});
}
},
}
</script>
在页面中绑定下载事件
<button class="downloadBtn" type="primary" @click="render2.myprint">下载</button>
保存到手机相册还需要一个插件image-tools。在页面的script标签中进行生成
<script>
import {
base64ToPath
} from 'image-tools'
export default {
methods: {
/**
* base64字符串转成文件
* @param {String} base64Str // 允许包含前缀
*/
base64ToFile(base64Str) {
let imgUrl = base64Str.replace(/[\r\n]/g, '');
//将base64位的图片路径转换为临时路径
setTimeout(() => {
const url = imgUrl;
base64ToPath(url).then(path => {
this.saveImage(path)
})
.catch(error => {
console.error('图片的临时路径转换出错了:', error);
});
}, 500);
}
saveImage(path) {
let that=this
uni.saveImageToPhotosAlbum({
filePath: path, // 需要临时文件路径,否则base64无法保存
success: (path) => {
that.hideLoading()
},
fail: (errMsg) => {
console.log(errMsg);
}
});
},
downPdf(path) {
this.base64ToFile(path, fileName)
},
showLoading() {
uni.showLoading({
title: '导出到手机相册中'
})
},
hideLoading() {
uni.hideLoading()
},
}
}
</script>
之后就可以看到图片保存到了相册中