位置: IT常识 - 正文

微信小程序实现PDF预览功能——pdf.js(含源码解析)(微信小程序实现页面跳转)

编辑:rootadmin
微信小程序实现PDF预览功能——pdf.js(含源码解析) 文章目录前言一、pdf.js 是什么?二、使用步骤1.下载库文件2.使用方式微信小程序端——使用 web-view 标签H5 端——使用 iframe 标签(使用vue框架)3.更改源码如何隐藏顶部工具栏如何让用户强制阅读一定时间如何获取pdf总页数如何获取pdf当前页数将总页数和当前页数发送给小程序总结前言

推荐整理分享微信小程序实现PDF预览功能——pdf.js(含源码解析)(微信小程序实现页面跳转),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微信小程序实现轮播效果的组件,微信小程序实现灯泡开关效果,微信小程序实现懒加载,微信小程序实现页面跳转,微信小程序实现轮播效果的组件,微信小程序实现发红包,微信小程序实现聊天功能,微信小程序实现懒加载,内容如对您有帮助,希望把文章链接给更多的朋友!

前一段时间遇到了一个需求,关于 pdf 文件的预览,客户要求如下:

只能在微信小程序内预览,不能调起本地浏览器预览;需要让用户强制阅读 10s 后才算阅读完成,进而进行下一步操作;用户不能下载预览的 pdf 文件;

因为一些原因(此处省略一万字🐎),这个项目具有 H5 端和原生微信小程序端,并且他们有着相同的业务逻辑😊,所以最好的办法就是设计出一套方案适用两端,前期做了一些尝试,可以看这篇文章,最后决定使用 pdf.js 来实现业务要求。

一、pdf.js 是什么?

PDF.js 由 Mozilla 提供支持。目标是创建一个通用的、基于 Web 标准的平台,用于解析和呈现 PDF。

二、使用步骤1.下载库文件

前往 pdf.js 的 官网 下载库文件,我们下载哪个版本都是可以的,后者适用于旧版浏览器,我这里下载的后者。

下载完成后,因为微信小程序打包的限制,我将库文件放到腾讯云服务器上,如果想测试可以联系我提供测试资源。 H5 可以放到本地,目录如下:

2.使用方式

通过web目录下 viewer.html 查看器 + pdf文件路径预览pdf文件

yourPath/web/viewer.html?file=pdfPath微信小程序端——使用 web-view 标签微信小程序实现PDF预览功能——pdf.js(含源码解析)(微信小程序实现页面跳转)

代码示例:

//.wxml<web-view src="{{pdfView+pdfUrl}}" ></web-view>//.jsdata: {// viewer.html 查看器的路径 pdfView:"yourPath/web/viewer.html?file=", // 要预览的 pdf 文件的路径 pdfUrl:"http://play.li-stack.top:88/pdf/sjisr-3-2-36-42.pdf" },

运行效果:

H5 端——使用 iframe 标签(使用vue框架)

代码示例:

<template> <div> <iframe :src="src" style="width: 100%;height: 100vh" ></iframe> </div></template><script> export default { name: "myTestTwo", data(){ return { url:'http://play.li-stack.top:88/pdf/sjisr-3-2-36-42.pdf', src:'' } }, mounted() { this.getUrl(); }, methods :{ getUrl:function () { this.src = '/pdfplugin/web/viewer.html?file=' + this.url } } }</script><style scoped></style>

运行效果:

注意事项:

web-view 标签默认铺满全屏,会覆盖其他组件;H5项目使用 pdf.js 注意跨域问题;3.更改源码如何隐藏顶部工具栏

在业务要求中,不能让用户下载 pdf ,我这里处理的办法就是将顶部工具栏隐藏 处理方法:

在 web 文件夹下的 viewer.html 文件,搜到 <div class="toolbar">将其改为 <div class="toolbar" style="display:none">这样就可以隐藏了。如何让用户强制阅读一定时间

在让用户强制阅读时,一定是 pdf 文件先加载完成,才开始倒计时。 处理方法:

在 viewer.js 中找到 load 函数(可直接搜索load: function load(pdfDocument定位)) ,部分代码如下load: function load(pdfDocument) { var _this11 = this; this.pdfDocument = pdfDocument; pdfDocument.getDownloadInfo().then(function (_ref4) { var length = _ref4.length; _this11._contentLength = length; _this11.downloadComplete = true; _this11.loadingBar.hide(); firstPagePromise.then(function () { _this11.eventBus.dispatch("documentloaded", { source: _this11 }); }); });//添加以下代码let mytime = 10 let timeout = setInterval(()=>{ console.log("倒计时:",mytime) if(mytime == 0){ clearTimeout(timeout) }else{ --mytime } },1000) …… }当pdf加载成功后运行效果,页面渲染效果大家可以自行实现 如何获取pdf总页数

同样在上述 load 函数中,当pdf加载完成后,pdfDocument 属性中就包含了当前 pdf 的总页数 处理方法:可通过 pdfDocument.numPages 获取

如何获取pdf当前页数

如果能获取当前页数,也获取了总页数,这就可以实现阅读进度了,当然阅读进度的细节还有很多,比如用户很快地往下滑,这种肯定不能算是真正阅读了,在这里我就不细分了,下面来获取一下当前页数 处理方法:

可以在本地储存中获取,键名:pdfjs.history;找到函数 function webViewerPageChanging(_ref15) ,当每次滑动屏幕时,每经过一个页面就会得到当前页数,代码如下:function webViewerPageChanging(_ref15) { var pageNumber = _ref15.pageNumber, pageLabel = _ref15.pageLabel; //这里打印出来 console.log(pageNumber) PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel); PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber); if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber); }}将总页数和当前页数发送给小程序

有时候会需要H5和小程序通讯,可以参考 这篇文章

总结

本文主要是针对微信小程序的 web-view 标签,在H5中使用 ifream 获取页数会有更简单的的方法, 例如可以尝试:

var iFrame = document.getElementById('iframe_id');if( iFrame.contentDocument){let currentPageNum = iFrame.contentDocument.getElementById('pageNumber').value;}//或者document.querySelector('iframe id').contentWindow.PDFViewerApplication.page;//或者window.PDFViewerApplication.pdfViewer.currentPageNumber

欢迎大家积极交流……

本文链接地址:https://www.jiuchutong.com/zhishi/274913.html 转载请保留说明!

上一篇:详解Linux系统中关机与重启相关命令的用法(linux系统的)

下一篇:Win11正开发新功能:可直接通过任务栏调整音量(win10开发工具在哪)

  • 企业微博营销的3宜3忌(企业微博营销的方法)

    企业微博营销的3宜3忌(企业微博营销的方法)

  • win10屏幕几秒黑屏几秒又显(win10屏幕几秒黑屏几秒又显腾讯会议会掉线吗)

    win10屏幕几秒黑屏几秒又显(win10屏幕几秒黑屏几秒又显腾讯会议会掉线吗)

  • 华为打印机怎么连接手机(华为打印机怎么换墨盒视频)

    华为打印机怎么连接手机(华为打印机怎么换墨盒视频)

  • 电信怎么查话费(电信怎么查话费余额)

    电信怎么查话费(电信怎么查话费余额)

  • vivo手机指纹锁怎么设置(vivo手机指纹锁怎么破解)

    vivo手机指纹锁怎么设置(vivo手机指纹锁怎么破解)

  • ipad2最高能升级到什么版本(ipad2最高能升级到10)

    ipad2最高能升级到什么版本(ipad2最高能升级到10)

  • 可移动磁盘是u盘吗(可移动磁盘是什么意思)

    可移动磁盘是u盘吗(可移动磁盘是什么意思)

  • 抖音怎么看关注的人什么时候在线(抖音怎么看关注一个人多久了)

    抖音怎么看关注的人什么时候在线(抖音怎么看关注一个人多久了)

  • 阿里巴巴账号是什么(阿里巴巴注册帐号)

    阿里巴巴账号是什么(阿里巴巴注册帐号)

  • 删留言频繁怎么继续删(删留言操作过于频繁怎么回事)

    删留言频繁怎么继续删(删留言操作过于频繁怎么回事)

  • 管理员可以@所有人吗(管理员key)

    管理员可以@所有人吗(管理员key)

  • 苹果x支持快充不(苹果X支持快充吗)

    苹果x支持快充不(苹果X支持快充吗)

  • vol键是什么意思(vol是什么按键)

    vol键是什么意思(vol是什么按键)

  • 华为手机服务框架有用吗(华为手机服务框架可以删除吗)

    华为手机服务框架有用吗(华为手机服务框架可以删除吗)

  • 抖音打开没网络怎么回事(打开抖音显示没有网络)

    抖音打开没网络怎么回事(打开抖音显示没有网络)

  • word文字竖排变成横排(word文字竖排变成横排怎么办)

    word文字竖排变成横排(word文字竖排变成横排怎么办)

  • 小米手机怎么备份(小米手机怎么备份通讯录)

    小米手机怎么备份(小米手机怎么备份通讯录)

  • 9700f和9700k区别(9700kf和9700f哪个好)

    9700f和9700k区别(9700kf和9700f哪个好)

  • 咸鱼怎么关注别人账号(闲鱼上怎么关注其他人)

    咸鱼怎么关注别人账号(闲鱼上怎么关注其他人)

  • 苹果手机怎么识别图片文字(苹果手机怎么识别物品)

    苹果手机怎么识别图片文字(苹果手机怎么识别物品)

  • 美图秀秀怎么做壁纸(美图秀秀怎么做印章)

    美图秀秀怎么做壁纸(美图秀秀怎么做印章)

  • 美团众包有哪些订单类型(美团众包有哪些兼职)

    美团众包有哪些订单类型(美团众包有哪些兼职)

  • 如何解决 npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)报错问题(如何解决焦虑)

    如何解决 npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)报错问题(如何解决焦虑)

  • python中断言的使用注意(python 断言)

    python中断言的使用注意(python 断言)

  • 计提个税会计科目怎么做
  • 土地出让金会涨价吗
  • 营业外支出影响利润
  • 分公司怎么分配股权
  • 小规模增值税减免会计账务处理
  • 企业清算需要什么
  • 增值税一般计税方法
  • 净资产出资账务处理流程
  • 公司茶水间备的零食该计入什么会计科目核算?
  • 本月出口下月开发票可以吗
  • 车船税为什么没有优惠
  • 小额纳税人可以开6%专票吗
  • 个人独资企业股权转让要交什么税
  • 未开发票申报
  • 加工业务怎么报税的
  • linux系统安装浏览器
  • 默认网关不可用修复后过一会又不好使了
  • win10系统出现蓝屏恢复
  • 购买方已认证的专票怎么红冲
  • 吊销执照公司资产怎么办
  • 技术开发免征增值税怎么开票
  • 行政单位房租收入上交分录
  • wordpress访客记录怎么看
  • 票据贴现办法
  • 建筑行业怎么做职业生涯规划
  • 长期挂账的其他应付账款怎么处理
  • vue 网页
  • laravel执行seed命令
  • 个人所得税减免政策2023
  • re.findall()用法
  • 小规模城建税减半征收2021新政策
  • 应付职工薪酬会产生暂时性差异吗
  • vue项目页面跳转
  • nerf 入门
  • jsoup js
  • php微信公众号开发反回图片怎么弄的学校
  • exfat转换fat32命令
  • 申报经营所得成绩怎么填
  • 家具采购单
  • 公允价值变动损益
  • zabbix安装部署
  • 用于研发的材料做成产品出售后怎么做账
  • 防暑降温费用发放标准
  • 客户发票弄丢了应该如何补救
  • sql服务无法启动 3417
  • 未开票收入如何计提增值税
  • 车辆购置税滞纳金上限
  • 研究费用记入什么费用
  • 利息收入红字如何入账
  • 建筑业清包工合同范本
  • 认缴制下实收资本需要验资吗
  • 公司物资借用手续
  • 信用证保证金的计算公式
  • 增值税发票过期一年未认证怎么办
  • 核算税金怎么核算
  • 独立核算的单位是什么意思
  • 话费充值发票可以开公司抬头吗
  • 本年利润的计算
  • 进项票超期未认证怎么办
  • 未分配利润转增股本要交税吗怎么交
  • 基于Sql Server通用分页存储过程的解决方法
  • mysql m1
  • linux存在的意义
  • win7修改系统版本
  • 如何进入win10安装界面
  • rapimgr.exe - rapimgr进程是什么文件.有哪些作用
  • windows预体验版本遇到问题
  • linux怎么那么难用
  • windowsxp的主要特点是什么
  • win8.1网络设置
  • windows mobile
  • Linux服务器架设指南百度网盘
  • css spirit
  • 监控服务器安装教程
  • 命令行输入以下哪个命令可以画出样条曲线
  • js移动到指定位置
  • js中dom的用法
  • python怎么做脚本
  • javascript原型链详解
  • 光伏发电要交税不
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设