如何从Internet下载PDF文件并使用PDFRENDERER渲染



我正在尝试下载带有以下代码的PDF文件:

 try {
                URL url = new URL(urls[0]);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.connect();
                if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
                    return "Server returned HTTP " + conn.getResponseCode() + " "
                            + conn.getResponseMessage();
                }
                //Useful to display progress
                int fileLength = conn.getContentLength();

                //Download the mFile
                InputStream input = new BufferedInputStream(conn.getInputStream());

                //Create a temp file cf. https://developer.android.com/training/data-storage/files.html
//                mFile = File.createTempFile(FILENAME, "pdf", mContext.getCacheDir());
                mFile = new File(getFilesDir(), "temp.pdf");
                FileOutputStream fos = openFileOutput("temp.pdf",MODE_PRIVATE);


                byte[] buffer = new byte[10240];
                long total = 0;
                int count;
                while ((count = input.read(buffer)) != -1) {
                    if (isCancelled()) {
                        input.close();
                        return null;
                    }
                    total += count;
                    //Publish the progress
                    if (fileLength > 0) {
                        publishProgress((int) (total * 100 / fileLength));
                    }
                    fos.write(buffer);
                }
                Log.i(LOG_TAG, "File path: " + mFile.getPath());

                fos.flush();
                fos.close();
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

接下来,我想使用pdfrenderer渲染下载的文件。每当我将使用上述代码创建的文件对象传递到PDFrenderer类中的parcelfiledScriptor.open()时,我都会收到"异常:不采用PDF格式或损坏的文件"。
渲染代码执行以下内容,以创建一个PDFRENDERER:

 mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
            // This is the PdfRenderer we use to render the PDF.
            mPdfRenderer = new PdfRenderer(mFileDescriptor);

我该如何解决?我尝试了许多选项,例如创建具有createTemPfile和许多stackoverflow帖子的临时文件,但是我尝试的只是失败了。有人知道我的问题是由吗?

首先,您需要在Android中创建一个文件,然后向其打开输出文件流:

        mFile = new File(getFilesDir(), "temp.pdf");
        FileOutputStream fos = openFileOutput("temp.pdf",MODE_PRIVATE);

接下来,在写入输出流(由本文提供)时,您将要避免使用一个非常常见的Java毛刺,然后将流动作者更改为:

            fos.write(buffer, 0, count);

相关内容

  • 没有找到相关文章

最新更新