首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PdfRenderer错误: java.io.IOException:无法创建文档。错误:3

PdfRenderer错误: java.io.IOException:无法创建文档。错误:3
EN

Stack Overflow用户
提问于 2018-08-20 06:24:27
回答 1查看 4.1K关注 0票数 0

我正在尝试将PDF转换成图像位图。为此,我正在使用下面的代码。

代码语言:javascript
复制
pdfFile = Environment.getExternalStorageDirectory().toString() + "/" + "imagepdf.pdf"

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            try {
                Uri uri = MainActivity.getUriFromFile(PdfExtrectorActivity.this,new File(pdfFile));
                final ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(
                        uri, "r");
                final FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
                pdfRenderer = new PdfRenderer(parcelFileDescriptor);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Bitmap bitmap;
            final int pageCount = pdfRenderer.getPageCount();
            for (int i = 0; i < pageCount; i++) {
                PdfRenderer.Page page = pdfRenderer.openPage(i);


                bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
                page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);



                // close the page
                page.close();
            }

            // close the renderer
            pdfRenderer.close();
        }

当我将ParcelFileDescriptor发送到pdfRenderer时,它将引发异常

代码语言:javascript
复制
java.io.IOException: cannot create document. Error: 3

我从GitHub问题中找到了一些链接。https://github.com/googlesamples/android-PdfRendererBasic/issues/15,但它帮不了我。

接受任何帮助。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 04:50:27

我的问题解决了这个解决方案,从PDF转换图像位图,这是在SD卡。

这件事对我来说很好

代码语言:javascript
复制
  File file = new File(getCacheDir(), PDF_FILE_NAME);
        //if (!file.exists()) {
        // Since PdfRenderer cannot handle the compressed asset file directly, we copy it into
        // the cache directory.
        //InputStream asset = context.getAssets().open("imagepdf.pdf");
        FileInputStream fileInputStream = null;
        FileOutputStream output = null;
        try {
            fileInputStream = new FileInputStream( Environment.getExternalStorageDirectory().toString() +  "/imagepdf.pdf");
            output = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        final byte[] buffer = new byte[1024];
        int size;
        while ((size = fileInputStream.read(buffer)) != -1) {
            output.write(buffer, 0, size);
        }
        fileInputStream.close();
        output.close();
        //}
        ParcelFileDescriptor mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
        // This is the PdfRenderer we use to render the PDF.
        PdfRenderer renderer = null;
        if (mFileDescriptor != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                renderer = new PdfRenderer(mFileDescriptor);
                Bitmap bitmap;
                final int pageCount = renderer.getPageCount();
                for (int i = 0; i < pageCount; i++) {
                    PdfRenderer.Page page = renderer.openPage(i);

                    // say we render for showing on the screen
                    bitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
                    page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
                    myImageBitmap.add(bitmap);
                    // do stuff with the bitmap

                    // close the page
                    page.close();
                }

                // close the renderer
                renderer.close();
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51925092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档