29.Android展示PDF文件

转载请注明出处 http://blog.csdn.net/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();
    }
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值