微信小程序使用webview页面转pdf文件代码示例
更新时间:2024年09月04日 09:50:56 作者:大聪明了
工作需求,将webview的内容导出到pdf输出,下面这篇文章主要给大家介绍了关于微信小程序使用webview页面转pdf文件的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
前言:正式上线,在小程序后台配置业务域名
一、uniapp 使用 webview
<template> <web-view :src="url" @message="message"></web-view> </template> <script> export default { data() { return { url: '' } }, onLoad(option) { this.url = `http://www.xxx.com?orderId=${option.orderId}`; }, methods: { message(e) { this.imageData = e.detail.data[0].imageData let path = this.imageData.split('base64,')[1] this.download(path) }, async download(url) { let result = url.replace(/[\r\n]/g, ''); var fs = wx.getFileSystemManager(); let fileName = ''; var times = new Date().getTime(); url = wx.base64ToArrayBuffer(result); // console.log(url,'图片临时路径') const filePath = wx.env.USER_DATA_PATH + '/' + Date.now() + '.pdf' fs.writeFile({ filePath, data: url, // 将 base64 转为 arrayuffer success(res) { uni.openDocument({ showMenu: true, fileType: 'pdf', filePath, success: function(res) { console.log('打开文档成功') } }) }, fail(err) { console.log('错误', err) } }) } } } </script>
二、H5页面
(1) 安装两个插件
npm i jspdf html2canvas
<template> <view id="content">这是转pdf的内容</view> </template> <script> import html2Canvas from 'html2canvas'; import { jsPDF } from 'jspdf'; export default { data() { return { orderId: '' } }, onLoad(option) { this.orderId = this.getUrlParameter('orderId'); uni.showLoading({ title: '正在加载' }) setTimeout(() => { uni.hideLoading(); this.getPdf() }, 2000) }, methods:{ //接收uniapp传来的链接参数 getUrlParameter(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); }, getPdf() { let that = this var shareContent = document.getElementById('content'); var width = shareContent.offsetWidth / 1; var height = shareContent.offsetHeight / 1; html2Canvas(shareContent, { dpi: 900, scrolly: 0, // width:eleW,//生成后的宽度 // height:eleH,//生成后的高度 scrollx: -10, useCORS: true, //允许canvas画布内可以跨域请求外部链接图片, 允许跨域请求。 // backgroundColor: null //避免图片有白色边框 }).then((canvas) => { var context = canvas.getContext('2d'); context.mozImageSmoothingEnabled = false; context.webkitImageSmoothingEnabled = false; context.msImageSmoothingEnabled = false; context.imageSmoothingEnabled = false; var pageData = canvas.toDataURL('image/jpeg', 1.0); var img = new Image(); img.src = pageData; img.onload = () => { // 获取dom高度、宽度 img.width = img.width / 2; img.height = img.height / 2; img.style.transform = 'scale(0.5)'; if (width > height) { // 此可以根据打印的大小进行自动调节 // eslint-disable-next-line var pdf = new jsPDF('l', 'mm', [width * 0.545, height * 0.545]); } else { // eslint-disable-next-line var pdf = new jsPDF('p', 'mm', [width * 0.545, height * 0.545]); } pdf.addImage(pageData, 'jpeg', 0, 0, width * 0.545, height * 0.545); pdf.save('这是文件命名' + '.pdf'); //h5在这就可以保存pdf //内嵌到微信小程序 var blob = pdf.output("datauristring"); console.log(wx, 'wx') wx.miniProgram.getEnv(function(res) { console.log("当前环境:" + JSON.stringify(res)); }); wx.miniProgram.postMessage({ data: { imageData: blob }, }); wx.miniProgram.navigateBack() }; }).catch((r) => { console.log(r); }) } } } </script>
(2) 在App.vue 添加以下代码
onLaunch() { console.log('App Launch') // #ifdef H5 var script = document.createElement('script'); script.src = "https://res.wx.qq.com/open/js/jweixin-1.4.0.js"; script.type = 'text/javascript'; document.body.appendChild(script); // #endif },
总结
到此这篇关于微信小程序使用webview页面转pdf文件的文章就介绍到这了,更多相关微信小程序webview页面转pdf内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
js 模块化CommonJS AMD UMD CMD ES6规范详解
这篇文章主要为大家介绍了js 模块化CommonJS AMD UMD CMD ES6规范详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-04-04兼容IE,firefox的获取节点的文本值的javascript代码
javascript获取节点的文本值,已经考虑了兼容性。大家可以放心使用。注意了这里的兼容没有使用innerText,如果要使用兼容innerText,请参考脚本之家以前发布的文章。2009-12-12jquery $(document).ready()和window.onload的区别浅析
这篇文章主要介绍了jquery $(document).ready()和 window.onload的区别浅析,本文总结了执行时间、编写个数不同、简化写法等不同的地方,需要的朋友可以参考下2015-02-02Rxjs map, mergeMap 和 switchMap 的区别与联系
这篇文章主要介绍了Rxjs map,mergeMap和switchMap的区别与联系,map、mergeMap和switchMap是RxJS中的三个主要运算符,在SAP Spartacus开发中有着广泛的使用场景2022-07-07
最新评论