zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/tangchun/p/9686474.html
Copyright © 2011-2022 走看看