使用PdfRenderer解析PDF文件

作者: Wang_Yi | 来源:发表于2016-11-09 21:26 被阅读2437次

    首先很遗憾的是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

    相关文章

      网友评论

      本文标题:使用PdfRenderer解析PDF文件

      本文链接:https://www.haomeiwen.com/subject/thstpttx.html