快速实现PDF,DOC,XLS,PPT等⽂件预览说起app内部浏览pdf以及办公⽂档,对于android来说就不像ios那么⽅便,直接在webview⾥放⼊相应链接即可实现app内部预览;但是⾯对要预览pdf,doc等⽂件的需求,安卓⼩伙伴⼜不可能不去实现,只因产品⼀句ios就能android为什么不能;然后,在不断的撕逼与妥协之下相当⼀部分的实现⽅式就是将⽂件下载下来调⽤第三⽅APP打开。这种跳出⾃家应⽤的体验的确不怎么好,但是⾯对有限的开发时间这也不失为⼀种解决⽅式。
好了,故事背景介绍完毕,下⾯聊⼀下⼏种解决⽅案;
⼀、服务器端解决
1、把pdf相关⽂档⽣成图⽚,给客户端展⽰;
2、应⽤pdf.js这个第三⽅⼯具,由服务器端提供⼀个html页⾯,实现调⽤pdf.js相关⽅法传⼊⽂件链接,即可通过客户端webview实现在线预览,当然客户端也可以把pdf.js相关内容放到本地assets⾥⾃⼰实现。但是实⽤pdf.js有个缺点就是在⼿机端预览时,如果⼿机配置⾼的话还是⽐较流畅的,否则的话绘制⽐较慢,还有个缺点就是如果把pdf.js放到应⽤本地实现,安装包会多好⼏兆,具体多少我也不记得了,毕竟是去年⽤这个东西试了下,感觉不太理想就删了。
3、其他。
⼆、客户端解决
1、上⾯说的pdf.js,也可由客户端单独完成,如果觉得合适可以试试⽤下。
2、使⽤腾讯提供的X5内核,坑还是⽐较多的,如果想试着⾃⼰踩(反正我不想,哈哈…),可以⾃⼰实现看看,如果不想⾃⼰踩下⾯我会推荐⼀个封装好的⼯具包的使⽤⽅法,简单易⽤。
虽说该⼯具直接拿来就能⽤,我觉得,简单介绍⼀下X5内核实现的逻辑还是有必要的,尽管不懂也不影响接⼊。下⾯简单说⼀
下,app要加载pdf⽂件就需要先加载pdf插件,然⽽加载pdf插件之前需要有X5内核,所以说有了X5内核就可以顺利的预览pdf⽂件了。如果⼿机上装有qq,,或者qq浏览器,本地基本都会有X5内核,只要你在⾃⼰的应⽤内调⽤内核初始化代码,就可共享使⽤本地已有的X5内核。如果本地没有,那就只能⾃⼰下载了,⼤概20M多点,官⽅说法是90秒左右可以下载完,我试了下快的话30秒左右也能下载完,具体还是看⽹速。
3、其他。
如下图,我拿两个⼿机试了下,从图中可以看出,第⼀次使⽤,如果没有X5内核要⼏⼗秒才能加载完成,之后再使⽤,⼀两秒也就加载完成了。
vivi内核加载
华为荣耀内核加载
废话不再多说,刚才提到的第三⽅⼯具,就是封装了X5内核的DocOpen。使⽤⽅式如下,跟别的jar引⼊⽅式⼀样,在相应的model
的.gradle引⼊
implementation 'dking.x5:app:+'
如图:
jar导⼊
由于X5内核只有32位没有64位,所以要⽀持64为⼿机,同时要在.gradle加⼊如下配置
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
如图:
ndk配置
⾄此,jar导⼊以及相关配置完成,下⾯看代码实现,主要功能该jar包已经实现,包括⽂件下载,进度显⽰以及下载完成后渲染pdf⽂件。我们只需要做下⾯两件事:
第⼀,初始化X5内核,直接在⾸页Activity调⽤初始化代码,如下
InitX5.initX5(this);
第⼆,把jar包⾥的DocOpenFragment放⼊我们⾃⼰的Activity或者Fragment,实现⾃⼰的顶栏样式即可。代码如下
布局⽂件red_act_l:
dpkg命令<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="schemas.android/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
android:layout_height="50dip"
android:background="#0894EC"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_close"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="15dip"
android:paddingRight="20dip"
android:textColor="#ffffff"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:gravity="center"
android:textSize="18sp"
android:text="关闭"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/tv_close"
android:textColor="#ffffff"
android:layout_centerInParent="true"
android:singleLine="true"
android:gravity="center"
android:textSize="18sp"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/ll_doc_frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/rl_title">
</RelativeLayout>
</RelativeLayout>
页⾯代码DocOpenDemoActivity.java:
/**
*
* 声明:该DocOpenDemoActivity 只是使⽤⽅式演⽰,要实现⾃⼰的页⾯应该写⾃⼰的activity嵌⼊DocOpenFragment
*
* 1、app的⾸页Activity调⽤Init.initX5(this);提前加载好内核,如果没有内核第⼀次⼤概需要90秒
*
* 2、按照DocOpenDemoActivity⽅式把DocOpenFragment 放⼊activity
*
* 3、通过docOpenFragment.setFilePath(fileUrl)设置⽂件路径(可以是本地路径,也可以是⽹络下载地址),在beginTransactionmit();之前调⽤ *
*/
public class DocOpenDemoActivity extends Activity{
FragmentManager fragmentManager;
FragmentTransaction beginTransaction;
DocOpenFragment docOpenFragment;
StringfileUrl="sources.dia/guice.pdf";
private TextView tvTitle;
@Override
jquery下载的文件怎么使用protected void onCreate(Bundle savedInstanceState) {
setContentView(d_act_doc_demo);
initView();
文本编辑器安卓推荐软件initData();
}
private void initView(){
c语言程序设计搜题软件tvTitle = (TextView) findViewById(R.id.tv_title);
}
private void initData(){
if(getIntent().getStringExtra("fileUrl") != null && getIntent().getStringExtra("fileUrl") != "" )
fileUrl = getIntent().getStringExtra("fileUrl");
fragmentManager = getFragmentManager();
beginTransaction = fragmentManager.beginTransaction();
docOpenFragment = new DocOpenFragment();
//设置⽂件路径
docOpenFragment.setFilePath(fileUrl);
beginTransaction.add(R.id.ll_doc_frag, docOpenFragment);go项目漏洞
beginTransactionmit();
java开发api接口如何编写tvTitle.FileName(this));
}
}
⾄此,代码实现完成,是不是很快,下⾯看⼀下效果吧。如图:
预览效果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论