Android内嵌PDF预览
一、在对应模块的build.gradle文件中加入依赖
dependencies {
implementation 'com.github.barteksc:android-pdf-viewer:3.1.0-beta.1'
}
二、Activity布局Xml文件中,加入com.github.barteksc.pdfviewer.PDFView控件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".PdfActivity"> <com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdfView"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </android.support.constraint.ConstraintLayout>
三、PDFView只能预览本地文件 如果是网络PDF还需要下载
PDFView加载本地文件代码
/**
* 查看PDF
*/
private void SeePdf(File dest) {
try {
pdfView.setVisibility(View.VISIBLE); pdfView.useBestQuality(false);
Constants.Cache.CACHE_SIZE=40;
pdfView.fromFile(dest).load();
} catch (Exception e) { e.printStackTrace(); } }
下载PDF使用OKhttp:
/**
* 开始下载PDF
*/
private void DownloadPdf() {
cacheUrl = getCacheDir().getAbsolutePath();//应用缓存路径
pdfName = mPdfUrl.substring(mPdfUrl.lastIndexOf("/") + 1);//文件名称
final File dest = new File(cacheUrl, pdfName);
if (dest.exists()) {
SeePdf(dest);
} else {
Request request = new Request.Builder().url(mPdfUrl).build();
new OkHttpClient().newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// 下载失败
} @Override
public void onResponse(Call call, Response response) throws IOException {
Sink sink = null;
BufferedSink bufferedSink = null;
try {
if (!dest.exists()) {
boolean newFile = dest.createNewFile();
}
sink = Okio.sink(dest);
bufferedSink = Okio.buffer(sink);
bufferedSink.writeAll(response.body().source());
bufferedSink.close();
if (handler == null) {
handler = new Handler(Looper.getMainLooper());
}
handler.post(new Runnable() {
@Override
public void run() {
SeePdf(dest);
}
});
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedSink != null) {
bufferedSink.close();
} }
}
});
}
}
自动翻页的实现:
1、在PDFView的OnRenderListener实现翻页,handler.postDelayed来定时执行翻页方法
pdfView.fromFile(dest).onRender(new OnRenderListener() {
@Override
public void onInitiallyRendered(int nbPages) {
if (pdf_trun_time != null) {
if (handler == null) {
handler = new Handler();
}
handler.postDelayed(goNextPageRunnable, pdf_trun_time);
}
}
})
.load();
private Runnable goNextPageRunnable = new Runnable() {
@Override
public void run() {
if (pdf_trun_time != null) {
handler.postDelayed(this, pdf_trun_time);//设置循环时间,此处是5秒
GoNextPage();
}
}
};
private void GoNextPage() {
int totalPage = pdfView.getPageCount();
int curPage = pdfView.getCurrentPage();
int nextPage = 0;
if (curPage < totalPage - 1) {
nextPage = curPage + 1;
} else {
nextPage = 0;
}
pdfView.jumpTo(nextPage, true);
}
Android内嵌PDF预览的更多相关文章
- Android原生PDF功能实现:PDF阅读、PDF页面跳转、PDF手势伸缩、PDF目录树、PDF预览缩略图
1.背景 近期,公司希望实现安卓原生端的PDF功能,要求:高效.实用. 经过两天的调研.编码,实现了一个简单Demo,如上图所示. 关于安卓原生端的PDF功能实现,技术点还是很多的,为了咱们安卓开发的 ...
- PDF预览之PDFObject.js总结
get from:PDF预览之PDFObject.js总结 PDFObject.js - 将PDF嵌入到一个div内,而不是占据整个页面(要求浏览器支持显示PDF,不支持,可配置PDF.js来实现 ...
- Android平台之不预览获取照相机预览数据帧及精确时间截
在android平台上要获取预览数据帧是一件极其容易的事儿,但要获取每帧数据对应的时间截并不那么容易,网络上关于这方面的资料也比较少.之所以要获取时间截,是因为某些情况下需要加入精确时间轴才能解决问题 ...
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件
一.问题描述 今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建android项目时,预览activity_main.xml文件时提示 ...
- 浏览器实现PDF预览
1.使用jquery.media.js预览PDF <!DOCTYPE html> <html> <head> <meta charset="utf- ...
- Pdf预览功能实现(asp.net)
asp.net中使用 1.pdf预览功能实现的插件是pdfjs-1.5.188-dist //引入插件中相关的文件以及jquery文件 @section css{ <link rel=" ...
- Atitit.pdf 预览 转换html attilax总结
Atitit.pdf 预览 转换html attilax总结 1. Swf flash还是html1 2. pdf2htmlEX1 3. iText 5.5.0 发布,Java 的 PDF 操作类库1 ...
- cocos2d-x调用android内嵌浏览器打开网页
cocos2d-x调用android内嵌浏览器打开网页,能够从入口传入网址,C++调用android 的api就可以实现. 方法也非常easy 1. 改动"cocos2dx\platform ...
- ABAP FORM打印转PDF/pdf 预览
function ZSTXBC_SSFCOMP_PDF_PREVIEW. *"-------------------------------------------------------- ...
随机推荐
- 【原创】Python第二章——字符串
字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而 ...
- k8s部署kafka集群
一.概述 在k8s里面部署kafka.zookeeper这种有状态的服务,不能使用deployment和RC,k8s提供了一种专门用来部署这种有状态的服务的API--statefulset,有状态简单 ...
- python实战学习之numpy学习
numpy基础要点 1.生成数组 np.array([]) 2.变量的类型 numpy.ndarray 3.数据的类型 int8,float64,float32,bool等 4.数据的类型转换 x.a ...
- Perl文件测试操作和stat函数
在shell中通过test命令或者中括号[]可以进行文件测试以及其它类型的测试,例如判断文件是否存在,比较操作是否为真等等.perl作为更强大的文本处理语言,它也有文件测试类表达式,而且和shell的 ...
- Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken
前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)--技术流ken>,<Ansible常用模块介绍及使用(二)--技术流ken><Ansible剧本介绍及 ...
- Python之使用Pandas库实现MySQL数据库的读写
本次分享将介绍如何在Python中使用Pandas库实现MySQL数据库的读写.首先我们需要了解点ORM方面的知识. ORM技术 对象关系映射技术,即ORM(Object-Relational ...
- Python图像处理之图片文字识别(OCR)
OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同 ...
- Postgresql ODBC驱动,用sqlserver添加dblink跨库访问postgresql数据库
在同样是SQLserver数据库跨库访问时,只需要以下方法 declare @rowcount int set @rowcount =(select COUNT(*) from sys.servers ...
- c# 解密微信encryptedData字段
参考链接:https://www.cnblogs.com/jetz/p/6384809.html 我写了一个工具方法,直接照搬链接中的方法,还有一个工具类. public class Encrypt ...
- frp 初探
条件: (1) 服务器端要有公网 IP (2) 客户端能上网,能够访问服务器的公网 IP 下载 https://github.com/fatedier/frp/releases 根据服务器和客户端的操 ...