Android 打开网络上pdf文件

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/53927157 之前写过一篇Android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件。
+关注继续查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/53927157

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

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();
    }

代码地址


效果实现:
这里写图片描述

代码已经奉上,请大家伙给点建议。一起交流(1561281670)

相关文章
|
5月前
|
网络协议 Unix Linux
Android C++ 系列:Linux Socket 编程(二)网络套接字函数
socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描 述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调 用出错则返回-1。对于IPv4,domain参数指定为AF_INET。对于TCP协议,type参数指定为 SOCK_STREAM,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_DGRAM,表 示面向数据报的传输协议。protocol参数的介绍从略,指定为0即可。
99 0
|
5月前
|
缓存 网络协议 Java
Android O/P/Q 版本移植iperf网络性能测试工具
Android O/P/Q 版本移植iperf网络性能测试工具
336 0
|
9月前
|
XML 存储 JSON
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
150 0
|
11月前
|
XML 存储 JSON
Android Compose 新闻App(一)网络框架搭建
Android Compose 新闻App(一)网络框架搭建
381 0
Android Compose 新闻App(一)网络框架搭建
|
11月前
|
JSON 数据库 开发工具
Android 垃圾分类APP(六)网络处理
Android 垃圾分类APP(六)网络处理
161 0
Android 垃圾分类APP(六)网络处理
|
12月前
|
网络协议 Java Android开发
Android网络 | Socket(Eclipse--Java)
Android网络 | Socket(Eclipse--Java)
|
12月前
|
XML 缓存 IDE
Android网络 | URL和URLConnection详解及其实战案例
Android网络 | URL和URLConnection详解及其实战案例
|
人工智能 算法 Android开发
Android自动化中动态设置网络代理
由于现在很多应用的页面数据都是AI算法推荐生成的,所以每次打开同一个页面数据都会不一样,因此在做客户端UI自动化的过程中都会采用Mock方案,利用MockServer来提供稳定的测试数据,其中MockServer的代理需要手动配置。 拿Android手机举例,过程大致是:进入设置->进入 WLAN ->找对应 wifi 连接->进入详情->找到代理->选择手动->输入主机名->输入端口号->最后保存,可以看到每次都是重复操作,特别当你的自动化设备很多以及MockServer服务不稳定导致IP经常变的情况下累加的时间成本是很高的,而且一不小心,还有可能写错
309 0
Android自动化中动态设置网络代理
|
XML 存储 网络协议
优秀Android程序员必知必会的网络基础,积累总结
优秀Android程序员必知必会的网络基础,积累总结
|
消息中间件 缓存 监控
优秀Android程序员必知必会的网络基础,算法太TM重要了
优秀Android程序员必知必会的网络基础,算法太TM重要了
相关产品
云迁移中心
推荐文章
更多