• Stars
    star
    195
  • Rank 199,374 (Top 4 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 8 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

之前写过一篇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("http://file.chmsp.com.cn/colligate/file/00100000224821.pdf", "00100000224821.pdf");

    }
    /**
     * 获取打开网络的pdf文件
     * @param fileUrl
     * @param fileName
     */
    private void displayFromFile1( String fileUrl ,String fileName) {
        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();
    }

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

代码地址

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

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

More Repositories

1

AndroidRapidLibrary

Android 快速开发库,主要想实现一条属于自己的开发框架。包括网络访问,数据,UI等等
Java
578
star
2

Android-UploadMultipartImage

Android 仿照微信发说说,既能实现拍照,选图库,多图案上传 使用Retrofit技术。
Java
334
star
3

Android-ble

Android蓝牙4.0操作demo
Java
242
star
4

WeiXinProject

微信小程序实现--列表的上拉刷新和上拉加载
JavaScript
165
star
5

wx_ble

微信小程序 蓝牙实现
JavaScript
150
star
6

dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb-redis

dubbo2.5-spring4-mybastis3.2-springmvc4-mongodb-redis整合
JavaScript
120
star
7

Swift-BLE

本项目是通过Swift语言来实现IOS中蓝牙4.0的开发
Swift
61
star
8

seata-spring-boot-dubbo-nacos-shardingsphere-examples

如何进行seata1.2.0、sharding-sphere4.1.0和dubbo2.7.5 的整合,以及使用nacos作为我们的配置中心和注册中心
Java
58
star
9

springboot-dubbo-seata-nacos

使用SpringBoot和Seata实现Dubbo分布式事务管理
Java
44
star
10

PopupMenu

Android中自定义popupwindow
Java
43
star
11

health

Health使用react-antvie实现App底部tab切换,项目的引导页,点击“启动应用”,跳转到APP主页,主页底部的五个tab的实现等功能
JavaScript
40
star
12

springboot-dubbo-seata-zk

SpringBoot+Zookeeper+Seata实现Dubbo分布式事务管理
Java
18
star
13

Swift-Demo

本项目使用swift开发,从UI,网络,进阶,综合四个方面来总结学习
Objective-C
7
star
14

NDKdemo

Android studio中NDK的开发例子
Java
4
star
15

java_design_patterns

Java 设计模式的讲解库,主要适用于学习Java的设计模式
Java
2
star
16

micronaut-learning-example

micronaut 实践学习案例,是 micronaut 初学者及核心技术巩固的最佳实践。
Java
2
star
17

jeecms

HTML
1
star
18

mvp_framework

Java
1
star
19

AndroidProject

Java
1
star
20

lidong1665.github.com

细节决定成败,点滴铸就辉煌。
HTML
1
star