1

我想以图像格式获取第一个 pdf 页面,我正在使用 PdfViewer.jar,这是我的代码

private void pdfLoadImages()
{
    try
    {
        // run async
        new AsyncTask<Void, Void, Void>()
                {
                    // create and show a progress dialog
                    ProgressDialog progressDialog = ProgressDialog.show(getActivity(), "", "Opening...");

                    @Override
                    protected void onPostExecute(Void result)
                    {
                        //after async close progress dialog
                        progressDialog.dismiss();
                    }

                    @Override
                    protected Void doInBackground(Void... params)
                    {
                        try
                        {
                            // select a document and get bytes
                            File file = new File(librosPdfRuta[0]);
                            RandomAccessFile raf = new RandomAccessFile(file, "r");
                            FileChannel channel = raf.getChannel();
                            ByteBuffer bb = ByteBuffer.NEW(channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()));
                            raf.close();
                            // create a pdf doc
                            PDFFile pdf = new PDFFile(bb);
                            //Get the first page from the pdf doc
                            PDFPage PDFpage = pdf.getPage(1, true);
                            //create a scaling value according to the WebView Width
                            //final float scale = 1000 / PDFpage.getWidth() * 0.95f;
                            //convert the page into a bitmap with a scaling value
                            float scale = 1;
                            Bitmap page = PDFpage.getImage((int)(PDFpage.getWidth() * scale), (int)(PDFpage.getHeight() * scale), null, true, true);

                            guardarBytes(getBytes(page));


                    }
                    catch (Exception e)
                    {
                        Log.d("CounterA", e.toString());
                    }
                        return null;
                    }
                }.execute();
                System.gc();// run GC
    }
    catch (Exception e)
    {
        Log.d("error", e.toString());
    }
}

我从Need help to convert a Pdf page into Bitmap in Android Java 中得到这段代码

但我总是收到这个错误

09-22 13:51:37.232: E/APV.PDFRenderer(30616): do not show images
09-22 13:51:37.232: E/APV.PDFRenderer(30616): java.lang.UnsupportedOperationException: do not show images
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.PDFImage.getImage(PDFImage.java:223)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.PDFRenderer.drawImage(PDFRenderer.java:374)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.PDFImageCmd.execute(PDFPage.java:654)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.PDFRenderer.iterate(PDFRenderer.java:674)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.BaseWatchable.execute(BaseWatchable.java:263)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.BaseWatchable.go(BaseWatchable.java:197)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.sun.pdfview.PDFPage.getImage(PDFPage.java:237)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.bookreader.LibrosDispositivo$1.doInBackground(LibrosDispositivo.java:347)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at com.bookreader.LibrosDispositivo$1.doInBackground(LibrosDispositivo.java:1)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at android.os.AsyncTask$2.call(AsyncTask.java:287)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at java.util.concurrent.FutureTask.run(FutureTask.java:234)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
09-22 13:51:37.232: E/APV.PDFRenderer(30616):   at java.lang.Thread.run(Thread.java:841)

我该如何解决?非常感谢

4

1 回答 1

-1

AsyncTask 由 3 个参数组成。在你的情况下 android.os.AsyncTask。这里的 Params 和 Result 是 ui 线程的输入和输出。您不应该在 doInBackground() 方法中使用任何使用 ui 线程的函数。尝试从 doInBachround() 返回 Bitmap 并 onPostExecute 将其删除。

于 2013-09-22T12:18:45.470 回答