Android 打开网络上pdf文件

 更新时间:2017年04月02日 10:19:51   作者:请叫我小东子  
本文主要介绍了Android打开网络上pdf文件的方法,具有很好的参考价值。下面跟着小编一起来看下吧

之前写过一篇Android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件。今天终于可以兑现承诺了。frok一份代码https://github.com/JoanZapata/android-pdfview,源码地址:http://xiazai.jb51.net/201704/yuanma/android-pdfview-master_jb51.rar,开始改造一番。

1.基本思路:

打开网络pdf 思路整体还是来源与图片的加载。

android中加载网络图片的框架有很多个。如image-laoder, fresco、glide等,首先都是从内存中找图片,如果内存中没有,接着从本地找,本地没有在从网络下载。

android中加载pdf也是类似,首先从本地找pdf文件,如果本地存在该pdf文件,直接打开,如果本地不存在,将该pdf文件下载到本地在打开。

下载文件用到了retrofit2的库,已经封装到android_pdf中了。

2.依赖android_pdf库方法

2.1 在项目的gradle中增加如下代码:

compile 'com.lidong.pdf:android_pdf:1.0.1'

2.2 一句代码就可以加载网络pdf。

pdfView.fileFromLocalStorage(this,this,this,fileUrl,fileName);   //设置pdf文件地址

2.3对fileFromLocalStorage(this,this,this,fileUrl,fileName)的解析

/**

 * 加载pdf文件
 * @param onPageChangeListener
 * @param onLoadCompleteListener
 * @param onDrawListener
 * @param fileUrl
 * @param fileName
 */
 public void fileFromLocalStorage(
 final OnPageChangeListener onPageChangeListener,
     final OnLoadCompleteListener onLoadCompleteListener,
     final OnDrawListener onDrawListener,
     String fileUrl,
     final String fileName)
  1. OnPageChangeListener onPageChangeListener :翻页回调
  2. OnLoadCompleteListener onLoadCompleteListener:加载完成的回调
  3. OnDrawListener:页面绘制的回调
  4. String fileUrl : 文件的网络地址
  5. String fileName 文件名称

3.使用android_pdf库方法

3.1写一个布局文件

<?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:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
tools:context="com.lidong.pdf.androidpdf.MainActivity">
 <com.lidong.pdf.PDFView
 android:id="@+id/pdfView"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 />
</RelativeLayout>

3.2在MainActivity中加载

import android.graphics.Canvas;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.lidong.pdf.PDFView;
import com.lidong.pdf.api.ApiManager;
import com.lidong.pdf.listener.OnDrawListener;
import com.lidong.pdf.listener.OnLoadCompleteListener;
import com.lidong.pdf.listener.OnPageChangeListener;
import com.lidong.pdf.util.FileUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.ResponseBody;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity implements OnPageChangeListener
 ,OnLoadCompleteListener, OnDrawListener {
 private PDFView pdfView ;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 pdfView = (PDFView) findViewById( R.id.pdfView );
 displayFromFile1("填写所要打开的pdf地址");
 }
 /**
 * 获取打开网络的pdf文件
 * @param fileUrl
 * @param fileName
 */
 private void displayFromFile1( String fileUrl ,String fileName) {
 showProgress(); pdfView.fileFromLocalStorage(this,this,this,fileUrl,fileName); //设置pdf文件地址

 }
 /**
 * 翻页回调
 * @param page
 * @param pageCount
 */
 @Override
 public void onPageChanged(int page, int pageCount) {
 Toast.makeText( MainActivity.this , "page= " + page +
 " pageCount= " + pageCount , Toast.LENGTH_SHORT).show();
 }
 /**
 * 加载完成回调
 * @param nbPages 总共的页数
 */
 @Override
 public void loadComplete(int nbPages) {
 Toast.makeText( MainActivity.this , "加载完成" + nbPages , Toast.LENGTH_SHORT).show();
 hideProgress();
 }
 @Override
 public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
 // Toast.makeText( MainActivity.this , "pageWidth= " + pageWidth + "
 // pageHeight= " + pageHeight + " displayedPage=" + displayedPage , Toast.LENGTH_SHORT).show();
 }
 /**
 * 显示对话框
 */
 private void showProgress(){
 LoadingUIHelper.showDialogForLoading(this,"报告加载中,请等待。。。",false);
 }
 /**
 * 关闭等待框
 */
 private void hideProgress(){
 LoadingUIHelper.hideDialogForLoading();
 }

代码地址

效果实现:

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • Android 基于Bitmap的四种图片压缩方式

    Android 基于Bitmap的四种图片压缩方式

    本文中探究的图片压缩方式主要是基于 Bitmap 的 api 实现。文中探究实现的压缩方式有四种:质量压缩、采样率压缩、Matrix 缩放压缩、图片编码格式压缩,感兴趣的朋友可以参考下
    2021-05-05
  • android实现直播点赞飘心动画效果

    android实现直播点赞飘心动画效果

    这篇文章主要为大家详细介绍了android实现直播点赞飘心动画效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Flutter禁止手机横屏的简单实现方法

    Flutter禁止手机横屏的简单实现方法

    app默认是可以横屏的,如果需要禁止横屏话可以参考这篇文章,本文主要给大家介绍了关于Flutter禁止手机横屏的简单实现方法,需要的朋友可以参考下
    2021-07-07
  • Android自定义控件eBook实现翻书效果实例详解

    Android自定义控件eBook实现翻书效果实例详解

    这篇文章主要介绍了Android自定义控件eBook实现翻书效果的方法,结合实例形式分析了Android自定义控件实现翻书效果的具体步骤与相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • android读取assets文件示例

    android读取assets文件示例

    这篇文章主要介绍了android读取assets文件示例,需要的朋友可以参考下
    2014-02-02
  • Android中ArrayList和数组相互转换

    Android中ArrayList和数组相互转换

    在我们日常开发中难免会要将ArrayList和数组相互转换,那么如何才能相互转换呢?下面跟着小编一起通过这篇文章学习学习。
    2016-08-08
  • android获取附近蓝牙设备并计算距离的实例代码

    android获取附近蓝牙设备并计算距离的实例代码

    下面小编就为大家分享一篇android获取附近蓝牙设备并计算距离的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android开发之开关按钮用法示例

    Android开发之开关按钮用法示例

    这篇文章主要介绍了Android开发之开关按钮用法,结合实例形式分析了Android开关按钮的具体实现、布局与功能设置相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • 在Android上实现HttpServer的示例代码

    在Android上实现HttpServer的示例代码

    本篇文章主要介绍了在Android上实现HttpServer的示例代码,实现Android本地的微型服务器,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • Android自定义谷歌风格ProgressBar

    Android自定义谷歌风格ProgressBar

    这篇文章主要为大家详细介绍了Android自定义谷歌风格ProgressBar的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02

最新评论