uniapp-APP环境下截屏或整个页面生成图片

我开发的是内嵌原生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>

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值