pdf格式在安卓界面是上无法直接展示的,但是遇到了要加载pdf格式的操作并且在界面展示出来,所以必须要想解决的方法

查找资源的过程中找到了AndroidPDFview的第三方控件,使用方法:

1、首先要在moudle的build.ghradle里compile一个pdfview地址

compile 'com.github.barteksc:android-pdf-viewer:1.4.0'

2、在xml里面使用pdfview,跟自定义控件用法一下,代码如下

<com.github.barteksc.pdfviewer.PDFView
    android:id="@+id/pdfView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
界面效果如图



3、我在测试此功能的时候使用的是在asset里面加入了一个pdf的文件,然后通过如下方法获取asset路径然后展示效果


private void displayFromAsset(String assetFileName) {


    pdfView.fromAsset(assetFileName)
            .defaultPage(0)
            .onPageChange(this)
            .enableAnnotationRendering(true)
            .onLoad(this)
            .load();
}

注意:次方法只需要传入pdf文件的名称即可,不需要传入路径,因为fromAsset就是读取asset下文件

然后我注意到pdfView还有一个方法fromUri(uri)可是我传入一个pdf文件的uri界面上并没有实现我想要的效果(pdf文件没有展示出来,并没有深入研究,如果谁在使用过程中可以展示的话请及时通知博主)

 

查看源码发现其实pdfView有三个展示方法  ⑴ fromAsset() ⑵ fromUri() ⑶ fromFile()

最后我采用的是先把这个pdf格式的文件下载到本地,然后在通过fromFile()来实现展示实现代码如下:

进入界面后马上开启一个Thread下载pdf文件

Thread downLoadThread = new Thread(mdownApkRunnable);
downLoadThread.start();

Runnable实现如下:


private Runnable mdownApkRunnable = new Runnable() {
    @Override
    public void run() {
        try {
            URL url = new URL(detailurl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.connect();
            int length = conn.getContentLength();
            InputStream is = conn.getInputStream();
            File file = new File(FileImage.path);
            if (!file.exists()) {
                file.mkdir();
            }
            
            pdfFile= FileImage.path + "my.pdf";
File ApkFile = new File(pdfFile);
FileOutputStream fos = new FileOutputStream(ApkFile); int count = 0; byte buf[] = new byte[1024]; do { int numread = is.read(buf); count += numread; progress = (int) (((float) count / length) * 100); //更新进度 mHandler.sendEmptyMessage(DOWN_JINDU); if (numread <= 0) { //下载完成通知安装 mHandler.sendEmptyMessage(DOWN_OVER); break; } fos.write(buf, 0, numread); } while (true); fos.close(); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }};
创建文件夹,创建一个名字为my的pdf文件,然后下载文件下载完成后通过hander发送消息然后让pdfview来展示这个pdf,代码如下:

private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case DOWN_JINDU:
                Log.i(TAG, "handleMessage: ==" + progress);
                shapeLoadingDialog.setLoadingText("加载中..."+progress);
                break;
            case DOWN_OVER:
                Log.i(TAG, "handleMessage: =wanchengh=");
                shapeLoadingDialog.dismiss();
                displayFromFile();
                break;
            default:
                break;
        }
    }
};
最后展示pdf文件

private void displayFromFile() {
    pdfView.fromFile(new File(pdfFile))
            .defaultPage(0)
            .onPageChange(this)
            .enableAnnotationRendering(true)
            .onLoad(this)
            .load();
}

最终效果实现如下:













Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐