Android加载pdf格式文件
·
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(); }创建文件夹,创建一个名字为my的pdf文件,然后下载文件下载完成后通过hander发送消息然后让pdfview来展示这个pdf,代码如下: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(); } }};
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(); }
最终效果实现如下:
更多推荐
已为社区贡献1条内容
所有评论(0)