我开发的是内嵌原生app的uniapp小程序,运行在APP环境下(行不行的放代码里试一下)
1、截屏
const capture = () => {
let _this = this
var pages = getCurrentPages();
var page = pages[pages.length - 1];
console.log("当前页" + pages.length - 1);
var bitmap = null;
var currentWebview = page.$getAppWebview();
// #ifdef APP-PLUS
bitmap = new plus.nativeObj.Bitmap('amway_img');
// 将webview内容绘制到Bitmap对象中
currentWebview.draw(bitmap, function() {
console.log('截屏绘制图片成功');
bitmap.save("_doc/a.jpg", {}, function(i) {
console.log('保存图片成功:' + JSON.stringify(i));
pageImage.value = i.target
let imageList=[]
imageList.push(pageImage.value)
//图片预览
// uni.previewImage({
// urls: imageList // 需要预览的图片http链接列表
// })
}, function(e) {
console.log('保存图片失败:' + JSON.stringify(e));
});
}, function(e) {
console.log('截屏绘制图片失败:' + JSON.stringify(e));
});
// #endif
}
2、整页生成图片
//安装依赖
npm install html2canvas
页面代码,
<template>
<view class="page" id="contractimage4">
<view class="content">
3、参与对工程质量、施工进度的监督及对材料进场、工程竣工的验收。甲方应向乙方提供必要的施工条件及所需使用的材料堆放区,负责做好施工现场的安全等工作
</view>
<view class="content">
4、工程所在的物业或其他管理单位因施工而收取的各项管理费用,由甲方承担,乙方协助提供物管或其他管理单位所需相关资料。
</view>
<view class="content">
5、协调乙方与邻里关系,协助有关部门做好现场安全等工作,并承担相应费用。
</view>
<view class="content">
6、在工程施工过程中遇需相关部门及单位审批的施工项目,甲方必须提供相关部门及单位的同意施工相关文件或通知。
</view>
<view class="content">
7、未办理合法手续,要求乙方拆改原施工现场管线、重要设施设备及结构主体,由此发生的损失或事故(包括罚款),由甲方负责并承担损失。
</view>
<view class="point">(二)、乙方的责任</view>
<view class="content">
1、根据甲、乙双方确认的施工方案,制定进度计划,交甲方审定。
</view>
<view class="content">
2、指派
<!-- <input :disabled="isDisabled" type="text" class="date-input" v-model="form.value24" /> -->
为乙方驻工地代表,负责合同履行。按要求组织施工,保质、保量、按期完成施工任务,解决由乙方负责的各项事宜。
</view>
<view class="content">
3、遵守国家或地方政府及有关部门对施工现场管理的规定,严格按照施工方案(作法说明)进行施工,妥善保护好
施工现场周围建筑物、设备管线。做好施工现场垃圾消纳等工作,做好各项质量检查记录,加强施工人员的安全教育管理,参加竣工验收。
</view>
<view class="content">
4、在工程施工过程中遇需相关部门及单位审批的施工项目,甲方不能提供相关部门及单位的同意施工相关文件或通知,乙方有权拒绝。
</view>
<view class="content">
5、由于乙方在施工生产过程中违反有关安全操作规程,导致发生安全事故,乙方应承担由此引发相应的经济损失。
</view>
<view class="page-number">
第4页 共{{ pages }}页
</view>
<view class="article">第六条 工程保修约定</view>
<view class="content">
<!-- 施工项目保修期<input :disabled="isDisabled" type="text" class="date-input" v-model="form.value25" />年; -->
</view>
<view class="content">
本施工项目保修期自竣工验收合格之日起计算;②如甲方未按本合同规定按时向乙方支付工程施工费用或因地震、洪灾、在连续24小时内降雨量达到200毫米(含200毫米)以上、
在任何6小时内降雪量达到300毫米(含300毫米)以上等特殊情况导致本施工项目出现质量问题的,乙方不予承担保修责任。
</view>
<view class="content keywords">
保修期间因人为因素导致施工项目成品及设施而出现的质量问题,乙方不予承担保修责任。
</view>
<view class="article">第七条 纠纷解决办法 </view>
<view class="content">
因本合同产生纠纷,如协商无法解决,双方均有权向乙方所在地人民法院提起诉讼。
</view>
<view class="article">第八条附则</view>
<view class="content">
本合同一式二份,甲乙双方各执一份,自双方签字,后生效。
</view>
</view>
<button type="default" @click="html2canvas.emitData">下载</button>
<button type="default" @click="create">下载create</button>
</template>
<script>
export default{
data() {
return {
pages: 2,
}
},
methods: {
showLoading() {
console.log("加载中")
uni.showLoading({
title: '加载中……',
mask: true
})
},
hideLoading() {
uni.hideLoading()
},
renderFinish(opt) {
console.log("生成完成",opt)
// 获取到图片地址(base64)
// DoSomeThing ……
this.hideLoading()
},
}
}
</script>
<script module="html2canvas" lang="renderjs">
import html2canvas from 'html2canvas';
export default {
methods: {
emitData() {
// 根据自己需要截图区域
this.create('contractimage4');
},
async create(id) {
if (!id) {
return false;
}
try {
this.$ownerInstance.callMethod('showLoading', true);
//调用上一个script的方法
const timeout = setTimeout(async () => {
const domId = document.getElementById(id);
const canvas = await html2canvas(domId, {
width: domId.offsetWidth,
//设置canvas尺寸与所截图尺寸相同,防止白边
height: domId.offsetHeight, //防止白边
logging: true,
useCORS: true
});
const base64 = canvas.toDataURL('image/jpg', 1);
console.log("base64图", base64)
this.$ownerInstance.callMethod('renderFinish', {
path: base64,
el: id
});
clearTimeout(timeout);
}, 500);
} catch (error) {
console.log(error)
}
}
}
}
</script>