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. *"-------------------------------------------------------- ...
随机推荐
- centos7编译linux的内核源码
昨天编译了一个linux 内核源码,遇到一些问题, 今天把我遇到的问题和解决方法分享给大家.希望可以帮助到需要的人. 1.检查是否安装了相应的包 我第一次编译的时候只安装的“Development T ...
- web开发的跨域问题详解
本文由云+社区发表 做过 web 开发的同学,应该都遇到过跨域的问题,当我们从一个域名向另一个域名发送 Ajax 请求的时候,打开浏览器控制台就会看到跨域错误,今天我们就来聊聊跨域的问题. 1. 浏览 ...
- Java中的Interrupt使用
初心 用interrupt中断程序 初步实现 public class InterruptionInJava implements Runnable{ @Override public void ru ...
- 使用Hexo搭建个人博客的终极资料
一.前言 Hexo 是一个基于 NodeJs 博客框架,可以快速的帮我们搭建一个博客系统,Hexo使用的是Markdown(下文简称MD)解析文章的,在几秒内即可利用靓丽的主体生成静态网页. 推荐使用 ...
- Perl引用入门
在perl中只有3种基本的数据结构:标量.数组.hash.变量可以是数值,可以是字符串. 这三种基本数据结构的数据存储方式如下: 但是,仅仅由这3种基本结构,就可以构造出更复杂的数据结构,例如hash ...
- 行为型---状态者模式(State Pattern)
状态者模式的介绍 每个对象都有其对应的状态,而每个状态又对应一些相应的行为,如果某个对象有多个状态时,那么就会对应很多的行为.那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添 ...
- Jquery里的特定小技巧
jQuery 动态设置样式: https://blog.csdn.net/xiaoyuncc/article/details/70854925 jquery如 ...
- 有关于MVC SignalR的问题
刚拜读 @Learning hard 的 [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门 跟着博文一步步操作,这是新人的学习方式 然而笔者的开发环境和 @ ...
- 微服务框架Lagom介绍之一
背景 Lagom是JAVA系下响应式 微服务框架,在阅读本文之前请先阅读微服务架构设计,Lagom与其他微服务框架相比,与众不同的特性包括: 目前,大多数已有的微服务框架关注于简化单个微服务的构建-- ...
- vb.net 使用ip查詢(Host Name)(WorkGroup Name)(MAC Address)-運用cmd及nbtstat命令
Sub nbtstat(ByVal ip As String) Dim strRst, strRst1, strRst2, strRst3 As String Dim n1, n2, n3 As In ...