如何使用ParcelFileDescriptor从原始文件夹呈现pdf文件

时间:2016-12-14 05:39:21

标签: android pdf

我想渲染一个pdf,在原始文件夹中使用ParcelFileDescriptor尝试了太多来自其他帖子的方法但是没有一个对我有效。以下是代码

我从您建议的post复制了代码并修改了我的代码,但是即使显示没有错误,pdf也没有打开。

 public void render()
    {
        try
        {
            imgv = (ImageView) findViewById(R.id.img);
            int w = imgv.getWidth();
            int h = imgv.getHeight();
            Bitmap bm = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_4444);
            File fileBrochure = new File(Environment.getExternalStorageDirectory() + "/" + "abcd.pdf");
            if (!fileBrochure.exists())
            {
                CopyAssetsbrochure();
            }

            /** PDF reader code */
            File file = new File(Environment.getExternalStorageDirectory() + "/" + "abcd.pdf");
           // File file = new File("android.resource://com.nyt.ilm.mytestpdfreader/raw/abcd.pdf");
            PdfRenderer render = new PdfRenderer(ParcelFileDescriptor.open(file,ParcelFileDescriptor.MODE_READ_ONLY));
            if (CurrentPage < 0)
            { CurrentPage =0;
            }
           else if (CurrentPage > render.getPageCount()){
          CurrentPage = render.getPageCount() - 1;
        }
            Matrix m = imgv.getImageMatrix();
            Rect rect = new Rect(0,0,w,h);
            render.openPage(CurrentPage).render(bm,rect,m,PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
            imgv.setImageMatrix(m);
            imgv.setImageBitmap(bm);
            imgv.invalidate();
        }
         catch (Exception e)
        {
            e.printStackTrace();
        }
    }


    //method to write the PDFs file to sd card
    private void CopyAssetsbrochure() {
        AssetManager assetManager = getAssets();
        String[] files = null;
        try
        {
            files = assetManager.list("");
        }
        catch (IOException e)
        {
            Log.e("tag", e.getMessage());
        }
        for(int i=0; i<files.length; i++)
        {
            String fStr = files[i];
            if(fStr.equalsIgnoreCase("abcd.pdf"))
            {
                InputStream in = null;
                OutputStream out = null;
                try
                {
                    in = assetManager.open(files[i]);
                    out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/" + files[i]);
                    copyFile(in, out);
                    in.close();
                    in = null;
                    out.flush();
                    out.close();
                    out = null;
                    break;
                }
                catch(Exception e)
                {
                    Log.e("tag", e.getMessage());
                }
            }
        }
    }

    private void copyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[1024];
        int read;
        while((read = in.read(buffer)) != -1){
            out.write(buffer, 0, read);
        }
    }

0 个答案:

没有答案