位置: 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开发工具在哪)

  • 鸿蒙系统有充电提示音吗(鸿蒙系统充电温度限制)

    鸿蒙系统有充电提示音吗(鸿蒙系统充电温度限制)

  • 验证apple id服务器出错是什么意思(苹果id服务验证失败)

    验证apple id服务器出错是什么意思(苹果id服务验证失败)

  • 三星手机黑屏但有震动(三星手机黑屏但是触摸正常)

    三星手机黑屏但有震动(三星手机黑屏但是触摸正常)

  • qq空间举报多久恢复(qq空间举报人成功了那个人会知道吗)

    qq空间举报多久恢复(qq空间举报人成功了那个人会知道吗)

  • 苹果xr信息上面有一个感叹号(苹果xr信息图标一直有叹号)

    苹果xr信息上面有一个感叹号(苹果xr信息图标一直有叹号)

  • qq群文件在哪里找(手机qq群文件在哪里)

    qq群文件在哪里找(手机qq群文件在哪里)

  • 抖音极速版在哪里查订单(抖音极速版在哪里看赚的钱)

    抖音极速版在哪里查订单(抖音极速版在哪里看赚的钱)

  • 手机关机一个月对手机有影响吗(手机关机一个月微信还能收到消息吗)

    手机关机一个月对手机有影响吗(手机关机一个月微信还能收到消息吗)

  • qq头像总是更新到空间(qq头像总是更新怎么回事)

    qq头像总是更新到空间(qq头像总是更新怎么回事)

  • 前置摄像头坏了怎么人脸识别(前置摄像头坏了怎么切换后置)

    前置摄像头坏了怎么人脸识别(前置摄像头坏了怎么切换后置)

  • 三星s20ultra是曲面屏吗(三星s20u是曲面吗)

    三星s20ultra是曲面屏吗(三星s20u是曲面吗)

  • ip协议是可靠的吗(ip协议是可靠还是不可靠)

    ip协议是可靠的吗(ip协议是可靠还是不可靠)

  • iphone8小白点怎么开(苹果八小白点怎么关闭)

    iphone8小白点怎么开(苹果八小白点怎么关闭)

  • 打qq视频电话能录屏吗(qq打视频电话别人能看到吗)

    打qq视频电话能录屏吗(qq打视频电话别人能看到吗)

  • macbook为啥充不了电(mac book为什么充不进去电)

    macbook为啥充不了电(mac book为什么充不进去电)

  • vivo手机强制恢复出厂设置(vivo手机强制恢复)

    vivo手机强制恢复出厂设置(vivo手机强制恢复)

  • 数据的存储结构包括哪四种(数据的存储结构分为哪两类)

    数据的存储结构包括哪四种(数据的存储结构分为哪两类)

  • 手机qq为什么没有提示音(手机qq为什么没有扫码登录)

    手机qq为什么没有提示音(手机qq为什么没有扫码登录)

  • 为什么苹果手机电池健康度突然降低(为什么苹果手机突然黑屏打不开)

    为什么苹果手机电池健康度突然降低(为什么苹果手机突然黑屏打不开)

  • 微信小程序音频能下载吗(微信小程序音频和音乐怎么删除不了)

    微信小程序音频能下载吗(微信小程序音频和音乐怎么删除不了)

  • 人人视频电视上怎么安装(人人视频在智能电视)

    人人视频电视上怎么安装(人人视频在智能电视)

  • 怎么缩小照片内存容量(怎么缩小照片内存的应用)

    怎么缩小照片内存容量(怎么缩小照片内存的应用)

  • oppo reno新机可以无线充么(oppo reno新手机多少钱)

    oppo reno新机可以无线充么(oppo reno新手机多少钱)

  • ipad怎么看电池损耗(ipad怎么看电池效率)

    ipad怎么看电池损耗(ipad怎么看电池效率)

  • 快影如何去掉原声(快影如何去掉原字幕)

    快影如何去掉原声(快影如何去掉原字幕)

  • 小规模附加税减半征收什么时候开始
  • 税收征管法实施细则全文最新
  • 收客户刷卡手续费时客户不愿意缴费,如何处理
  • 利润表中持续经营净利润公式
  • 存货的领用
  • 非税收入票据能报销吗
  • 财政拨款税收政策
  • 支票去银行怎么进账
  • 黄金以旧换新怎么算费用
  • 财产租赁合同印花税计税依据含税吗
  • 固定资产附加的账务处理
  • 公司注销实收资本怎么处理
  • 企业购入生产设备所支付的增值税
  • 收到客户银行按时到账
  • 完成税务登记之后多久开始报个税?
  • 现金流量表借款还了流入和流出可以抵消吗
  • 商务旅行人身意外伤害险在税前扣除范围内吗?
  • 普票6个点怎么算
  • 红字增值税专用发票信息表能作废吗
  • 工程施工开具发票
  • 外包服务费税率是多少
  • 增值税缴纳计入成本吗
  • 健身房会计一般做什么
  • 捐赠货品怎么做会计分录
  • 企业风险报酬转移怎么理解
  • 银行对公账户网上注销流程需要多久
  • 小规模企业税务简易注销
  • 结转本月主营业务收入800000元,营业外收入2500元
  • XP系统,右下角本地连接图标消失的解决办法
  • 公司卖旧车税务处理流程
  • postman如何设置token
  • 什么是主营业务税金及附加
  • php验证源码
  • 超经营范围开具发票
  • 存货损失的会计处理方法
  • js进阶视频教程
  • php数据表
  • 用现金报销差旅费及增值税怎么做账
  • 存货盘盈盘亏的会计处理
  • 分公司二季度安全生产分析会内容
  • mysql 内连接查询
  • 普票和专票的
  • 企业成本计算的依据是什么
  • 公司名下的车怎样领免检标志
  • 全资子公司变成孙公司是利好吗?
  • 内含增长率的推导
  • 向银行按揭贷款时,收入流水不够怎么办?
  • 长期股权投资会计实训心得
  • 公益性捐赠全额扣除,企业所得税
  • 企业转让固定资产发生的费用
  • 分公司人数要求
  • 给员工的奖励怎么做会计分录
  • 买新车贷款
  • 商业企业销售摩托车需不需要征收消费税
  • mysql爆破字典
  • linux内核构成
  • window终端是什么
  • linux lv扩容
  • 联想昭阳k41笔记本
  • mac中的快捷键大全
  • ttf字体怎么转itz
  • Windows下查看PCI插槽链路
  • linux更改
  • opengl多窗口绘图
  • JavaScript实现QQ列表展开收缩扩展功能
  • shell脚本tr
  • python返回结果
  • unity unity3d
  • 使用jquery
  • python库怎么用
  • java对象怎么比较
  • javascript学习指南
  • android root 原理
  • python设计内容
  • 税基式减免,税率式减免,税额式减免三者之间的联系
  • 大征期和小征期的区别
  • 东莞市国税局南城莫
  • 浦东税务15所
  • 哈尔滨国家税务局客服电话
  • 税务稽查局什么时候独立出来
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设