【总结】- 文件(pdf,ppt,doc等)加载解决方案

简介

最近项目需要在线浏览PDF文档,即不是像微信,QQ那样点击了下载下来,然后跳转到其它应用打开。
肯定最快想到的方案就是用浏览器打开,但是发现,在IOS上面是可以正常打开的,可能是IOS本身就支持,在Android手机上却不行,百度一番,得到的结果是Android自带的WebView不支持。那么接下来就是寻找解决之法了,PDF的加载解决方案之旅就开始了。

PDF加载开源库

PDF-load

地址外链

这个解决方案是什么意思呢?有点抽象,看一下这个库就知道了。pdf.js
文档中提到使用方法:

Modern browsers:https://mozilla.github.io/pdf.js/web/viewer.html
Older browsers:https://mozilla.github.io/pdf.js/es5/web/viewer.html

比如用Older browsers这个外链地址:https://mozilla.github.io/pdf.js/es5/web/viewer.html?file=pdf地址,然后用浏览器加载。
如果不清楚,可以安装这么些,如果你是个想知道答案的人,可以问一下做web的朋友。

经尝试这种的确可以加载PDF文件,而且很省事。但是同时也存在很多问题。

  • PDF加载不出来
    经尝试:
    使用https://mozilla.github.io/pdf.js/web/viewer.html作为外链地址,基本上手机加载不出来。
    使用https://mozilla.github.io/pdf.js/es5/web/viewer.html可以加载。

  • 外链地址不能访问
    用了几个Android8.0及一下的手机测试了一波,都可以加载,正以为解决了问题时,测试说,我这边怎么加载不出来,我说,我这边完全没有问题啊。

    经调试,发现Android10手机,上面的外链地址都不能访问。Android9没有试。试着努力解决,无果,放弃。

  • 性能问题
    首先这个地址可以访问,但是访问速度呢,不敢说;加上用WebView加载PDF文件本来就存在性能问题,所以即便能加载,其实也不是很好的方案。

使用PDF.js

这个需要使用到上面说的开源库,你说外链访问不行,那把库集成到自己服务器或者集成到Android工程中,也可以下载到手机里,加载本地文件或者网络文件,不就可以了,这个方法的确可以解决,但是当时没时间弄,我也就随便找了一个解决方案,后面会说。这个方案可以用于手机加载网页使用。

  • 遇到的问题
    用手机或者浏览器加载时报错:


    截屏2020-10-31 下午11.29.55.png
截屏2020-10-31 下午11.42.37.png

在viewer.js为了安全,对域名进行了判断:


截屏2020-10-31 下午11.30.53.png

所以可以把这个函数(validateFileURL(file))的调用注释掉。

接下来就可以加载pdf
比如:file:///path/viewer.html?file=path/guanxin_paitent_test.pdf

使用AndroidPDF

这个库支持加载网络PDF文件,集成后apk大概增加1M多,但是效果嘛,不太好。

使用AndroidPdfViewer

这个库也是基于 PdfiumAndroid开始的,算是效果最好的库了。但是apk提交增加也很明显,配置ndk支持某种平台后,apk大概增加3.5M多。但是AndroidPdfViewer不能直接加载网络PDF文件,也不提供进度提示 。所以自己封装了一个用于加载网络PDF文档,支持使用默认,自定义进度条的库。PDF-load。具体实现查看开源库中的LibPdf模块。
使用:

<com.pds.pdf.core.ExtPDFView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pdfView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  private void displayFromUrl(String url) {
      pdfFileName = FileUtils.getFileNameByUrl(url);
      pdfView.fromUrl(url)
              .defaultPage(pageNumber)
              .onPageChange(this)
              .enableAnnotationRendering(true)
              .onLoad(this)
              .scrollHandle(new DefaultScrollHandle(this))
              .spacing(10)
              .onPageError(this);
      pdfView.enableCache(true)
              .useDefaultProgressView().go();

效果如下:


截屏2020-10-25 下午4.26.04.png
  • 直接加载Asset,本地文件,参考AndroidPdfViewer

  • 使用默认进度条

    LibPdf支持进度显示,LibPdf提供了默认的进度View,即在顶部显示类似加载网页一样的进度条,调用useDefaultProgressView方法即可。

    添加自定义进度View,支持3哥方向,分别是加在PDF视图的顶部,底部和叠在PDF视图的上面,等PDF加载完成隐藏。

  • 自定义进度条

    LibPdf支持自定义进度条,调用addCustomProgress方法加入自己的进度View。

使用 腾讯X5浏览器

使用腾讯X5引擎加载PDF,doc等文件。如果项目中使用了腾讯X5引擎,那么可以直接使用pdf-x5库浏览PDF,apk体积基本没有什么增加,如果项目中没有 使用X5引擎,要用pdf-x5加载PDF,那么需要先集成X5引擎,开源库中的web库提供的简单的X5集成。

该库一共支持几十中文件加载,只需要传入不同文件地址就可以了,下面是我测试的效果:

使用tbs加载:

截屏2020-10-26 下午6.53.32.png
  • pptx加载效果
截屏2020-10-26 下午6.54.40.png

使用QbSdk加载:

QbSdk加载支持的文件格式更多,具体参考腾讯X5官网

截屏2020-10-26 下午6.56.21.png

调用之后,优先调起 QQ 浏览器打开文件。如果没有安装 QQ 浏览器,在 X5 内核下调起简版 QB 打开文件。如果使用的系统内核,则调起文件阅读器弹框。

使用方法请参考PDF-load

SVG

大概思路就是把PDF文件转成SVG,但是SVG需要大量的计算量,而且我目前是通过其它网站进行的PDF转SVG

PDF转其它格式文件

比如转图片等,这个自己研究。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267