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

  • 谈谈如何利用博客对网站进行推广

    谈谈如何利用博客对网站进行推广

  • vivox70pro屏幕是三星的吗(vivox70pro屏幕是曲面屏吗)

    vivox70pro屏幕是三星的吗(vivox70pro屏幕是曲面屏吗)

  • windows11自动更新在哪里关闭(windows11自动更新好不好)

    windows11自动更新在哪里关闭(windows11自动更新好不好)

  • vivo手机微信账单怎么删除(Vivo手机微信账号丢了怎么办)

    vivo手机微信账单怎么删除(Vivo手机微信账号丢了怎么办)

  • airpods白灯不闪烁(airpods白灯不闪烁但是没有连接提示)

    airpods白灯不闪烁(airpods白灯不闪烁但是没有连接提示)

  • 抖音很费电怎么解决(如何解决抖音耗电)

    抖音很费电怎么解决(如何解决抖音耗电)

  • 苹果耳机盖子为什么松(苹果耳机盖子盖上还有声音)

    苹果耳机盖子为什么松(苹果耳机盖子盖上还有声音)

  • 荣耀hry-al00a什么型号(荣耀hry_al00)

    荣耀hry-al00a什么型号(荣耀hry_al00)

  • 百兆光猫能用千兆路由器吗(百兆光猫能用千兆线吗)

    百兆光猫能用千兆路由器吗(百兆光猫能用千兆线吗)

  • cpu gpu是什么意思(cpu跟gpu是什么意思)

    cpu gpu是什么意思(cpu跟gpu是什么意思)

  • ipad apple id无法登录(ipad apple id无法创建)

    ipad apple id无法登录(ipad apple id无法创建)

  • 手机锁屏后出现广告怎么关闭(手机锁屏后出现抖音视频提示怎么设置)

    手机锁屏后出现广告怎么关闭(手机锁屏后出现抖音视频提示怎么设置)

  • 电脑无网络连接怎么办(电脑无网络连接有个感叹号)

    电脑无网络连接怎么办(电脑无网络连接有个感叹号)

  • 苹果7p支持红外遥控吗(苹果7p支持红外线吗)

    苹果7p支持红外遥控吗(苹果7p支持红外线吗)

  • boss直聘删除好友对方知道吗(boss直聘删除好友他还能联系我吗)

    boss直聘删除好友对方知道吗(boss直聘删除好友他还能联系我吗)

  • iphone4s什么时候出的(iphone4s什么时候出的上市)

    iphone4s什么时候出的(iphone4s什么时候出的上市)

  • 怎么修改网站内容(怎么修改网站内容刷新跳过)

    怎么修改网站内容(怎么修改网站内容刷新跳过)

  • 手机网络不好怎么设置(手机网络不好怎么增强)

    手机网络不好怎么设置(手机网络不好怎么增强)

  • iphone11有屏下指纹么(苹果11有没有屏下指纹解锁)

    iphone11有屏下指纹么(苹果11有没有屏下指纹解锁)

  • 计算机存储系统一般指(计算机存储系统的三级结构)

    计算机存储系统一般指(计算机存储系统的三级结构)

  • 京东怎么删除我的预约(京东怎么删除我的评价记录)

    京东怎么删除我的预约(京东怎么删除我的评价记录)

  • iqoo几级防水(iqoo11防水等级是多少)

    iqoo几级防水(iqoo11防水等级是多少)

  • 电脑我的文档在哪里(电脑上我的文档)

    电脑我的文档在哪里(电脑上我的文档)

  • xr卡槽在哪(xr 卡槽)

    xr卡槽在哪(xr 卡槽)

  • metarename命令 -重命名元组件或切换分层元组件名称(metareg命令)

    metarename命令 -重命名元组件或切换分层元组件名称(metareg命令)

  • 有哪些凭证
  • 工业厂房房产税税率
  • 一般纳税人附加税优惠政策2023
  • 自己申报个人所得税需要补缴,必须自己申报自己补缴吗
  • 小规模免增值税的账务处理
  • 工程的管理费收入怎么算
  • 金税盘技术维护费账务处理
  • 民非组织捐赠收入免税
  • 记账凭证摘要的重要性
  • 补助属不属于工资
  • 货款为现金如何做记账账款凭证?
  • 企业增值税年底怎么结转
  • 营业额500万以上税率
  • 销货成本销货成本是什么类账户
  • 收购全资子公司的账务处理
  • 投资性房地产后续支出包括
  • 海外代付属于外债吗
  • 母公司对子公司的控股比例
  • 代开专票不满10万的要交附加吗?
  • 补缴的附加税怎么入账
  • 金蝶核算项目明细表
  • 周转材料计划成本会计分录
  • linux minor
  • 编译报错place 30-681
  • 购买货物现金付讫的会计分录
  • 广告费属于什么费用部门
  • 系统之家u盘重装系统流程
  • php技巧
  • 其他业务支出的二级科目有哪些
  • php的fopen
  • vue3elementplus首页布局
  • php获取另一个php返回内容
  • 房地产企业土地增值税预缴计税依据
  • 一朵牛肝菌 (© vnosokin/Getty Images)
  • err03 failed to
  • 存货捐赠视同销售的会计分录怎么做?
  • php验证表单方法有哪些
  • php页面跳转方法
  • java 日志系统
  • Uncaught SyntaxError: Unexpected token '<' (at 报错
  • 人民币跨境贸易占比
  • 出口货物退货会退税吗
  • 小规模的企业所得税怎么计算
  • 固定资产租赁费用的税前扣除标准
  • 实缴的钱注销后可以拿回来吗
  • 客户的赔偿金会计分录
  • 红冲暂估是什么意思
  • dedecms安装
  • mysql中用户和权限的作用
  • 帝国cms首页调用显示标题图片代码
  • 资产类账户有哪些
  • 应交税费要计提吗?
  • 员工出差车票属于哪个科目
  • 货款和发票金额不一致
  • 全额工资和实发工资
  • 营业外收入核算的内容有
  • 资产负债表月报的期初余额填什么
  • 拿支票取钱
  • 其它流动资产为负数原因
  • 零配件供应是什么意思
  • 组织机构代码证图片
  • sql有哪些语句
  • xp系统无法打开网页怎么解决
  • Mac OS X 10.9 Mavericks系统怎么激活?
  • 注册表c盘桌面路径改为d盘
  • 电脑win 8系统
  • win7英语
  • win7能玩的老游戏
  • win7电脑曝光度过高怎么调
  • linux awk $1
  • perl字符串替换 ~s
  • 文件夹右键菜单管理
  • unity3d基础教程
  • 详解九章算法
  • 电子发票密码在哪里看
  • 报fob价格最后谁退税
  • 太原市税务局电话
  • 企微宝破解
  • 北京朝阳区地税局地址电话
  • 航天信息的金税盘开票要怎么调格式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设