android pdf
Android端读取pdf文件:
1.使用google提供的服务,在你的pdf文件的前面加上一段url,例如:
你的pdf的地址:http://www.***.com/demo.pdf,那么 如果使用google提供的服务,则是:http //docs google com/gviewembedded=true&url=+"你的pdf的地址"
原理(猜想):google 可能是将pdf文件转换成了图片的形式展现出来.
缺点:google服务在国内无法被访问到,需要.
2.使用系统提供的浏览器打开,某一些浏览器提供了在线解码预览的效果,个人比较常用的是QQ浏览器,可以在线解码并预览pdf,word,excel等等.
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(path));
intent.setDataAndType(uri, "application/pdf");
startActivity(intent);
缺点: 如果手机上没有安装可以打开pdf文件的浏览器,仍然无法实现在线预览.
3.使用第三方开源的控件
1).AndroidPdfViewer
github地址:https://github.com/barteksc/AndroidPdfViewer
实例:
pdfView.fromUri(Uri)
or
pdfView.fromFile(File)
or
pdfView.fromAsset(String)
.pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default
.enableSwipe(true)
.swipeHorizontal(false)
.enableDoubletap(true)
.defaultPage(0)
.onDraw(onDrawListener)
.onLoad(onLoadCompleteListener)
.onPageChange(onPageChangeListener)
.onPageScroll(onPageScrollListener)
.onError(onErrorListener)
.enableAnnotationRendering(false)
.password(null)
.scrollHandle(null)
.load();
其中:
enableSwipe 是可选的,它可以让你改变阻止使用刷卡页面
pages 是可选的,它可以让你筛选并定向PDF的页面,看你需要
onDraw 也是可选的,并允许你画的东西提供的画布上,在当前页面上方
缺点:集成后,包的大小会有特别明显的增大.
优点:可以兼容到api11,并且兼容不同格式生成的pdf文件.
2).android-pdfview
github地址:https://github.com/JoanZapata/android-pdfview
实例:
pdfView.fromAsset(pdfName)
.pages(0, 2, 1, 3, 3, 3)
.defaultPage(1)
.showMinimap(false)
.enableSwipe(true)
.onDraw(onDrawListener)
.onLoad(onLoadCompleteListener)
.onPageChange(onPageChangeListener)
.load();
其中:
pages和onDraw是可选项,
pages:它可以让你过滤和你需要的PDF页面顺序,
onDraw:允许您在当前页面画布上画上一个的东西
优点:兼容到api18,支持多种格式加载
缺点:不同格式生成的pdf的支持兼容性差一些.
3).PdfViewPager
github地址:https://github.com/voghDev/PdfViewPager
实例:
public class RemotePDFActivity extends AppCompatActivity implements DownloadFile.Listener {
public void initPdfView(){
RemotePDFViewPager remotePDFViewPager =
new RemotePDFViewPager(context, "http://partners.adobe.com/public/developer/en/xml/AdobeXMLFormsSamples.pdf", this);
}
@Override
public void onSuccess(String url, String destinationPath) {
// That's the positive case. PDF Download went fine
adapter = new PDFPagerAdapter(this, "AdobeXMLFormsSamples.pdf");
remotePDFViewPager.setAdapter(adapter);
setContentView(remotePDFViewPager);
}
@Override
public void onFailure(Exception e) {
// This will be called if download fails
}
@Override
public void onProgressUpdate(int progress, int total) {
// You will get download progress here
// Always on UI Thread so feel free to update your views here
}
@Override
protected void onDestroy() {
super.onDestroy();
adapter.close();
}
}
优点:支持多种格式:网络,本地等,
缺点:仅兼容到api21,不支持一下.
4.这种解决方式需要前端开发人员的支持:(工作的重点已经不在app端了.)
使用firefox开源的pdf.js
由前端人员和后端人员合作,提供url给app端,通过浏览器或者webView来展示pdf文件.
github地址:https://github.com/mozilla/pdf.js/
可以下载下来,在pc端,简单搭建一个服务器环境测试一下.
以上是这一段接触pdf文件预览的总结.
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- android防止连续点击的简单实现(kotlin)