首页 > 编程语言 >利用PDF.js在微信小程序里预览PDF文件

利用PDF.js在微信小程序里预览PDF文件

时间:2023-10-23 12:08:11浏览次数:42  
标签:文件 微信 js https pdf PDF

在微信小程序可以通过wx.downloadFile 和 wx.openDocument 两个api下载并打开pdf文件。这种方式主要有不少的缺点:

1、需要下载才可以查看,且每次打开都需要下载生成一个临时文件,如果PDF文件比较多的话,临时文件会越来越多,且如果PDF文件比较大的话,打开会比较慢。
2、在导航栏显示标题是临时文件名,看上去不够优雅。
3、翻页不方便。

那PDF能不能在小程序直接预览呢?我尝试用微信小程序的web-view里显示PDF的文件,在开发工具里可以显示,但在真机里无法显示。在微信开放社区看有人用PDF.js在浏览器里打开PDF文件,PDF.js 由 Mozilla 提供支持,目标是创建一个通用的、基于 Web 标准的平台,用于解析和呈现 PDF. 通过web-view方式打开通过PDF.js解析的PDF文件,在微信开发工具里无法正常显示,不过好消息是:在真机里可以显示正常。

使用PDF.js来解析PDF方法如下:

1、去PDF.js官方网站下载此框架:https://mozilla.github.io/pdf.js/getting_started

2、把PDF.js部署到网站,PDF.js有两个文件夹web和build,把这两个文件放到网站的一个目录下比如pdfljs目录,在web目录下有个viewer.html文件,可以用它来在线解析pdf文件,当然pdf文件的链接需要在同一个域名,预览的方式是:

https://wwww.domianname.com/pdfjs/web/viewer.html?file=xxx/xxx/xxx.pdf

在微慕专业版已集成了PDF.js框架,支持通过pdf的链接在浏览器和小程序里预览PDF文件,在微慕专业里体验该功能的效果。

预览pdf文件:https://blog.minapper.com/wp-content/uploads/微慕小程序专业版.pdf

注意以上方式PDF文件的链接所在域名需要设置的小程序业务域名里。对于跨域的链接,虽然也支持,不过需要特别处理,具体详见链接:https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-xhr

下载打开pdf文件:https://www.watch-life.net/微慕小程序开源版.pdf

以上下载打开PDF文件的方式需要设置业务域名和downloadfile域名。

利用PDF.js在微信小程序里预览PDF文件,支持PDF.js的相关功能,比如:侧栏,查找,分页,缩放,添加文字,绘图,旋转,演示模式等。

利用PDF.js在微信小程序里预览PDF文件_web-view

利用PDF.js在微信小程序里预览PDF文件_微慕小程序_02

利用PDF.js在微信小程序里预览PDF文件_微慕小程序_03

上面是通过官方viewer.html来显示PDF文件,也可以通过引入PDF.js的方式来解析和显示,这个方式就可以自定义功能。方法如下:

1、引入pdf.js库

<script src="./build/pdf.js"></script>
<script src="./build//pdf.worker.js"></script>

 

2、用canvas接收需要读取到的pdf内容并显示

<canvas id="myCanvas"></canvas>

 

3、创建PDF对象:data可以是pdf文件对应的Base64字符串,也可以是文件所在相对或者绝对路径,也可以是一个在线文件url地址

var loadingTask = pdfjsLib.getDocument(data)
loadingTask.promise.then(function (pdf) {
                for (var i = 1; i <= pdf.numPages; i++) {
                    pdf.getPage(1).then(function (page) {
                        var scale = 2
                        var viewport = page.getViewport({ scale: scale })
                        var canvas = document.getElementById('myCanvas')
                        var context = canvas.getContext('2d')
                        canvas.height = viewport.height
                        canvas.width = viewport.width
                        var renderContext = {
                            canvasContext: context,
                            viewport: viewport,
                        };
                        page.render(renderContext);
                    })
                }
            });

 

有关PDF.js的更多信息,可以参考官方网站:https://mozilla.github.io/pdf.js/

标签:文件,微信,js,https,pdf,PDF
From: https://blog.51cto.com/u_1982739/7985271

相关文章

  • 10月23日粘包、struct模块以及json模块
    目录粘包如何解决粘包问题呢?struct模块json模块粘包粘包:tcp会把数据量较小,时间间隔较短的数据,当做同一个包发送粘包问题图粘包问题说白了就是客户端传给服务器的数据到服务器的时候有部分数据粘在了一块,而不是一条条的显示粘包产生情况大致图如何解决粘包问题呢?简单的方......
  • 如何锁定微信保护隐私?
    微信终于原生支持“锁定”功能了!引言一直以来,微信一直扮演者重要的通讯和社交工具,为人们带来极大的便利,由于受众众多,开发者对新功能的推出非常严谨和谨慎,即便是微小的功能增删或改动,都是深思熟虑。但广大用户出于对隐私保护的“锁定”功能的需求是与日俱增和逐渐强烈。有的用户......
  • 微信小程序 mqtt 连接中断原因
    上周开发微信小程序时新加了一个页面,复用了以前页面的逻辑,但是今天发现新加的页面出现了很奇怪的问题:进入新页面后,点一下查询再退出页面,mqtt连接正常;进入新页面后,直接返回退出页面,mqtt连接中断。WebSocketconnectionto"wss://www.xxxx.com/mqtt"failed:Closereceiveda......
  • Java Map填充Json模版,并生成Json文件
    一、准备工作引入基础的springboot环境引入freemark依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>创建json模版......
  • graalvmjs cube.js 集成简单说明
    实际上我以前也简单写过关于graalvm集成cube.js的,最近graalvmjs提供了独立的模块,我基于独立包创建了一个docker镜像尽管cube.js也提供了docker镜像,但是相对来说有点太重(包含了比较多的组件,同时很多是不需要的),很多时候我们是需要自己基于扩展开发的,以下是一个简单的集成(......
  • 10月23日粘包学习以及struct模块和json模块
    目录粘包如何解决粘包问题呢?struct模块json模块粘包粘包:tcp会把数据量较小,时间间隔较短的数据,当做同一个包发送粘包问题图粘包问题说白了就是客户端传给服务器的数据到服务器的时候有部分数据粘在了一块,而不是一条条的显示粘包产生情况大致图如何解决粘包问题呢?简单的方......
  • Vue.js框架:vue3版本父子组件之间的传值和事件触发
    一、子组件使用vue3官方提供的setup语法糖中给出的defineEmits、defineProps来定义父子间的传参值和关联方法(useContext在3.2版本之后已去除)。<scriptsetuplang="ts">import{defineProps,defineEmits}from'vue'constemitEvents=defineEmits(['so......
  • js_doucment.styleSheets获取StyleSheetList接口
    通过document.styleSheets可以获取到一个StyleSheetList接口constaStyleList=document.styleSheetsconsole.log(aStyleList.constructor.name)//StyleSheetListconsole.log(Object.prototype.toString.call(aStyleList))//[objectStyleSheetList]console.log(Arra......
  • 【2023最新教程】有道翻译js 超详细!!!
    目录前言确定加密字段破解加密字段加密字段实现破解返回值跟踪堆栈找到解密后的返回值函数实现解密返回值语言转换完整代码效果展示前言有道翻译两个加密第一个是表单的sign用MD5加密可以点击目录的加密字段实现直接跳转第二个是返回值AES加密,而且AES的密匙他还用md5加......
  • 一键解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
    json.decoder.JSONDecodeError:Expectingvalue:line1column1(char0)文章目录问题描述解决思路解决方法问题描述json.decoder.JSONDecodeError:Expectingvalue:line1column1(char0)解决思路JSONDecodeError是指在使用json.loads()方法时,解析JSONJSONDecodeError是......