在起微信中预览文件

第一种方法:
直接使用a标签,将href属性的值赋为你想要展示的文件的路径地址。
我用自己的手机测试(android)时,主要要经过下面的流程
打开----->首先下载QQ浏览器(手机没有安装的情况下)----->点击下载文件(这个文件会在QQ)浏览器中的下载那里出现(不会直接显示出来需要自己点击)------>点击这个文件之后会询问使用手机上面那个软件打开(如:WPS Office,浏览器等)

第二种方法:不用下载文件,使用pdf.js插件,最后在canvas中将我们要展示的pdf文件的内容绘制出来
pdf.js官方地址:http://mozilla.github.io/pdf.js/
下面是我自己的代码:
css部分

.lightbox {position: fixed;top: 0px;left: 0px;height: 100%;width: 100%;z-index: 7;opacity: 0.3;display: block;background-color: rgb(0, 0, 0);}.page-btn {background-color:#fff;z-index:9;}.pop {position: absolute;left: 0px;top: 0px;width: 100%;z-index: 9;}.pop input {width:100px;padding:0px;height:30px;}canvas {width: 100%;height: 100%;border: 1px solid black;}

下面是html部分

<ul class="mui-table-view"><li class="mui-table-view-cell"><a class="mui-navigate-right" onclick="loadPdf()">在线查看文件</a></li></ul>
<div id="container" style="display: none;"><div class="lightbox"></div><div id="pop" class="pop"><div class="page-btn"><label>当前页:<input type="text" name="name" id="page_num" value="" /></label><label>总页数:<input type="text" name="name" id="page_count" value="" /></label><button id="prev">上一页</button><button id="next">下一页</button></div><canvas id="the-canvas"></canvas></div></div>

JS部分

打开viewer.js文件,ctrl+f 搜索‘DEFAULT_URL 如果这个搜索不到可以改为搜索:compressed.tracemonkey这个字段,这个为默认文件地址,要修该的话,直接改掉它就可以了

<script src="pdf.js"></script><script>var url = 'help.pdf';// The workerSrc property shall be specified.PDFJS.workerSrc = 'pdf.worker.js';//PDFJS.cMapUrl = 'https://unpkg.com/pdfjs-dist@1.9.426/cmaps/';//PDFJS.cMapPacked = true;var pdfDoc = null,pageNum = 1,pageRendering = false,pageNumPending = null,scale = 3.0,canvas = document.getElementById('the-canvas'),ctx = canvas.getContext('2d');/*** Get page info from document, resize canvas accordingly, and render page.* param num Page number.*/function loadPdf() {PDFJS.getDocument(url).then(function (pdfDoc_) {pdfDoc = pdfDoc_;document.getElementById('page_count').value = pdfDoc.numPages;renderPage(pageNum);});}function renderPage(num) {var container = document.getElementById("container");container.style.display = "block";pageRendering = true;pdfDoc.getPage(num).then(function (page) {var viewport = page.getViewport(scale);canvas.height = viewport.height;canvas.width = viewport.width;var renderContext = {canvasContext: ctx,viewport: viewport};var renderTask = page.render(renderContext);renderTask.promise.then(function () {pageRendering = false;if (pageNumPending !== null) {renderPage(pageNumPending);pageNumPending = null;}});});document.getElementById('page_num').value = num;}function queueRenderPage(num) {if (pageRendering) {pageNumPending = num;} else {renderPage(num);}}function onPrevPage() {if (pageNum <= 1) {return;}pageNum--;queueRenderPage(pageNum);}document.getElementById('prev').addEventListener('tap', onPrevPage);function onNextPage() {if (pageNum >= pdfDoc.numPages) {return;}pageNum++;queueRenderPage(pageNum);}document.getElementById('next').addEventListener('tap', onNextPage);</script>

第三种:借用viewer.html来加载我们要预览的文件(如下图的文件结构中)

在需要跳转的地方添加点击事件:window.location.href = ‘/lib/Pdf/web/viewer.html?file=你要预览的文件的名字’;
注意:如果要用上面的地址需要将你要预览的文件放在与viewer.html文件同级的位置,同时如果有分不同类别的文件的话,可以新建自己的文件夹,与此同时你要修改window.location.href = '/lib/Pdf/web/viewer.html?file=这个位置不仅是你要打开的文件的名字了,还要有他的路径;


上面的第三种方法不好的地方是,你需要将你预览的文件都复制到项目中,如果预览的文件较多就会导致这个项目过大,这种情况并不是我们所希望的,我们一般都会将文件放在我们自己专属的文件服务器上,同时通过远程来访问这些文件。

远程访问就需要我们取修改源码中的一些地方,同时也需要后台配合可以进行跨域访问
需要修改的地方有以下几个地方:
1>要远程访问的话,远程访问文件名也可以放在file,和原来一样写上文件的名字就可以了
但是远程访问的话,file后面跟的就是http地址,这样浏览器就会因为识别不了两条http而报出一些奇怪的问题,这是就需要对file后面的文件地址进行转码,这里可以用js自带的encodeURIComponent就可以了,这样浏览器就不会报错了,你请求的地址就是经过转码之后的路径了。
2>首先这样远程访问还是会有问题的,首先pdf.js是不支持跨域文件加载的,直接加载是不会成功的,会报“file origin does not match viewer”错误,这里需要修改viewer.js中的代码,
注释掉下图中圈起来的地方

前端配置好了之后,还是会访问失败的,需要后端的配合,需要后端配置允许跨域访问

都配置好之后就可以实现远程访问了。

不过上述所有的方法到目前为止,当访问的文件数大时,就会加载很慢,
可以通过下面的方法优化pdf加载速度:
可以修改下面图片中的数字:我将原本默认的数字改成了16,加载速度是比以前快了一些。

经过上面的处理加载速度是快了一点,但是我测试了一个300页的文件它的加载速度还是很慢的大概需要:30秒左右,不知知道这个跟我们的服务器有关系没,但是还是觉得速度太慢。

我的文件预览是做在微信中的,这个响应时间还是太慢了,目前我还没有找到更好的解决方案,有没有大神有什么更好的建议,欢迎留言。

在手机端浏览pdf文件,遇到的问题整理相关推荐

  1. 手机端 阅读 pdf 文件 touchPDF.js

    touchpdf 中文API 下载地址: http://github.com/loicminghetti/touchpdf/archive/master.zip 一款在手机端 阅读pdf 文件的 js ...

  2. WPF 浏览PDF 文件

    很长时间没写文章感觉手有点生了,前段时间忙的要死公事.家事.私事,事事操心.还好现在有些时间可以继续写博客了.本篇将为大家演示如何在WPF 程序中浏览PDF 文件,本例将通过Adobe PDF Rea ...

  3. 网站开发之ie下在线浏览pdf文件无需本地支持

    1.首先,务必通过后面给的链接了解一些可实现的方法:打开链接. 2.个人选择了PDFObject+PDF.js来实现,这里需要下载pdfobject.js和PDF.js.对于pdfobject.js, ...

  4. 微信小程序----微信小程序浏览pdf文件

    微信小程序----微信小程序浏览pdf文件 说明:通过wx.downloadFile,wx.openDocumen来实现打开pdf文件.只需在js操作即可. HTTP.Config.Request(' ...

  5. 分享一款手机端的PDF文件编辑软件「PDF处理助手」简单、免费

    今天给大家来一款手机端的PDF文件编辑神器,"PDF处理助手",不过这款软件目前只有Android端的喔,ios的小伙伴有需要的话可以直接去Appstore搜索[pdf]下载相关的 ...

  6. 微信公众号或者浏览器实现在线浏览pdf文件

    微信公众号或者浏览器实现在线浏览pdf文件 实现在线浏览pdf文件方法 开发步骤: 实现在线浏览pdf文件方法 我们在日常的开发当中经常需要实现pdf文件的显示,最近做了一个在微信公众号中实现pdf浏 ...

  7. h5页面预览pdf文件_H5移动端在线浏览pdf文件,推荐插件TouchPDF

    pdf.png 公共的pdf页面可以自己写,调用插件的代码也相对简单: seePDF.html seePDF.js $(function() { //文件服务器的路径 var picDownloadS ...

  8. html在线浏览pdf文件

    最近在做一个项目,其中涉及到pdf文件,于是就想试着在线加载pdf文件,经过我的不懈努力,终于让我解决了这个问题 解决这个问题总共有两种方式 方式一. 将pdf转为图片保存,然后再把图片的地址发到页面 ...

  9. 8个实现在线浏览PDF文件的实用jQuery插件

    在web开发当中我们经常需要进行需要在线浏览PDf内容,在线嵌入动态pdf,传统的解决方法安装客户端PDF阅读器,如果是在谷歌是可以在线浏览的,因为他自身就带了一些插件,以前遇到这样的问题往往是费时又 ...

最新文章

  1. 机器学习(1)机器学习基础 鸢尾花数据集
  2. UVA 10603 Fill
  3. 机器学习入门-Knn算法
  4. python导入模块不在同一文件夹下_Python小技之自定义不同文件夹下模块导入问题...
  5. mysqld_safe启动mysql
  6. epoll边缘触发_4.2.3、epoll:水平触发与边缘触发
  7. Xshell报错“The remote SSH server rejected X11 forwarding request.”
  8. jQuery hash 插件
  9. LeetCode刷题——91. 解码方法
  10. 增程式串联混合动力实际项目模型,本模型基于Cruise软件和 Simulink软件共同搭建完成
  11. Kindle3 升级
  12. 阿里云国际版控制台使用海外云服务器教程详解
  13. 《非暴力沟通》读后感
  14. 【UFUN开发板评测】小巧而不失精致,简单而不失内涵——uFun开发板开箱爆照
  15. 如何计算满足指定条件下数值的平均值——DAVERAGE函数的使用
  16. SAP 资产会计过账-总账科目的获取
  17. TXD,RXD的意思
  18. Learning Synergies between Pushing and Grasping with Self-supervised Deep Reinforcement Learning
  19. 即将开学,为校园网络安全助力
  20. 在电脑上下载一些平台上视频的方法

热门文章

  1. 谷歌不支持调用摄像头麦克风_谷歌大手一挥,第三方相机或已无立锥之地
  2. IPTV(网络电视)
  3. 《阿里巴巴Java开发手册(正式版)》--MySQL规约
  4. 2020 GDUT Rating Contest I (Div. 2) A.Cow Gymnastics
  5. LaTex 写作技巧
  6. chrome 一进入调试页面就会自动打断点
  7. 在Pycharm 中import os 或者import selenium from selenium import webdriver就会报错
  8. 被问离职原因时哪类原因最好不要说?
  9. Broadcast详解
  10. replaceAll()用法