使用PdfRenderer解析PDF文件

首先很遺憾的是PdfRenderer這個類是LOLLIPOP以上才有的類,PdfRenderer中核心代碼是用的native方法,所以沒辦法將PdfRenderer從SDK中抽取出來用。

首先創建一個PdfRenderer

try {
            mFileDescriptor = getAssets().openFd("sample.pdf").getParcelFileDescriptor();
            mPdfRenderer = new PdfRenderer(mFileDescriptor);
        } catch (IOException e) {
            e.printStackTrace();
        }

將一頁的PDF渲染到一個Bitmap上

mCurrentPage = mPdfRenderer.openPage(index);
        //Bitmap必須是ARGB,不可以是RGB
        Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(), mCurrentPage.getHeight(),
                Bitmap.Config.ARGB_8888);
         /*
         * 調用PdfRender.Page的render方法渲染bitmap
         *
         * render的參數說明:
         * destination : 要渲染的bitmap對象
         * destClip :傳一個矩形過去 矩形的尺寸不能大于bitmap的尺寸 最后渲染的pdf會是rect的大小 可為null
         * transform : 一個Matrix bitmap根據該Matrix圖像進行轉換
         * renderMode :渲染模式 可選2種 RENDER_MODE_FOR_DISPLAY 和 RENDER_MODE_FOR_PRINT
         */
        mCurrentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
        mImageView.setImageBitmap(bitmap);

注意關閉資源

private void closeRenderer() throws IOException {
            if (null != mCurrentPage) {
                mCurrentPage.close();
            }
            if (null != mPdfRenderer) {
                mPdfRenderer.close();
            }
            if (null != mFileDescriptor) {
                mFileDescriptor.close();
            }
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            try {
                closeRenderer();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

一個demo:

demo.gif

 

來自:http://www.jianshu.com/p/8d063c2c6a9b

 

 本文由用戶 FraOLoughli 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!