转载请注明出处 http://blog.youkuaiyun.com/qq_31715429/article/details/51065730
本文出自:猴菇先生的博客
公司有个需求,展示pdf文件,之前是服务端将pdf文件转成H5来用WebView展示,现在如果客户端做的话,找到了一个开源类库com.joanzapata.pdfview.PDFView
Github地址:https://github.com/JoanZapata/android-pdfview
添加依赖就好了
但是并没有找到详细的使用方法,只能简单地展示:
1.activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.joanzapata.pdfview.PDFView
android:id="@+id/pdf_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
2.MainActivity.java:
package com.monkey.pdfviewdemo;
import android.graphics.Canvas;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.joanzapata.pdfview.PDFView;
import com.joanzapata.pdfview.listener.OnDrawListener;
import com.joanzapata.pdfview.listener.OnLoadCompleteListener;
import com.joanzapata.pdfview.listener.OnPageChangeListener;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private PDFView pdf_view;
private ProgressDialog mDialog;
private String mPdfUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pdf_view = (PDFView) findViewById(R.id.pdf_view);
mPdfUrl = "http://xxx/xxx.pdf";
loadPdf();
}
/**
* 加载pdf文件
*/
private void loadPdf() {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//判断有无SD卡
String pdfName = MD5Util.md5(mPdfUrl.trim());//文件名MD5加密
String target = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + pdfName;//pdf文件路径
LogMessage.e("monkey", "target-->" + target);
File file = new File(target);
mDialog = new ProgressDialog(PdfActivity.this);
mDialog.setMessage("正在加载...");
mDialog.setCanceledOnTouchOutside(false);
//如果文件下载过程中被取消的话,可能会导致打开的pdf文件出现缺少文字的bug,所以直接设置不能取消。。
mDialog.setCancelable(false);
mDialog.show();
if (file.exists()) {//已经存在,在sd卡本地读取
LogMessage.e("monkey", "pdf存在");
setPdfView(file);
} else {//不存在,从网络下载
LogMessage.e("monkey", "pdf不存在");
if (NetUtil.isNetConnect(PdfActivity.this)) {//判断网络连接
//为了简便使用了xUtils,下载超时时间为10秒
HttpUtils httpUtils = new HttpUtils(1000 * 10);
httpUtils.download(mPdfUrl, target, false, true, new RequestCallBack<File>() {
@Override
public void onSuccess(ResponseInfo<File> responseInfo) {
LogMessage.e("monkey", "pdf路径-->" + responseInfo.result.getAbsolutePath());
File file = new File(responseInfo.result.getAbsolutePath());
setPdfView(file);
}
@Override
public void onFailure(HttpException e, String s) {
}
});
} else {
ToastUtil.show(PdfActivity.this, "请检查网络连接");
}
}
} else {
ToastUtil.show(PdfActivity.this, "SD卡没有插好");
}
}
/**
* 设置pdf属性
*
* @param file
*/
private void setPdfView(File file) {
home_pdfview.setFitsSystemWindows(true);
home_pdfview.setFocusableInTouchMode(false);
//home_pdfview.fromAsset(file).load();
home_pdfview.fromFile(file)
.onLoad(new OnLoadCompleteListener() {
@Override
public void loadComplete(int nbPages) {
mDialog.dismiss();
}
})
//.swipeVertical(true)设置pdf文档垂直翻页,默认是左右滑动翻页
.onDraw(new OnDrawListener() {
@Override
public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
LogMessage.e("monkey", "pageWidth -- " + pageWidth + " pageHeight -- " + pageHeight);
}
})
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
Toast.makeText(MainActivity.this, "第" + page + "页/共" + pageCount + "页", Toast.LENGTH_SHORT).show();
}
})
.defaultPage(1)
.showMinimap(true)//是否显示缩放小地图
.enableDoubletap(true)//在放大状态下,双击会还原
// 如果想要在正常状态下,双击放大,需要
// (1).在PDFView.java中添加方法
// public void zoomWithAnimation() {
// animationManager.startZoomAnimation(1f, 1.7f); //缩放比例可自己修改
// }
// (2).在DragPinchManager.java中改写方法
// @Override
// public void onDoubleTap(float x, float y) {
// if (isZooming()) { //放大状态
// pdfView.resetZoomWithAnimation(); //还原
// } else { //正常状态
// pdfView.zoomWithAnimation(); //放大
// }
// }
.load();
}
}