繁体   English   中英

Android Itext PDF库OutOfMemoryError

[英]Android itext pdf library OutOfMemoryError

我正在使用itext库来创建图像和文本的pdf。 以下代码可在4个设备中的3个上正常工作,但在第4个设备上,我得到OutOfMemoryException。 该代码在AsyncTask doinbackground方法内部运行,它使用bimtmap对象检查每个jpg文件(来自sdcard的文件目录)的旋转,相对于高度测量宽度,并在必要时将itext Image对象旋转90度。

        try {

            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(
                    Environment.getExternalStorageDirectory()
                            + "/doc" + documentID + ".pdf"));
            document.open();
            document.setMargins(0f, 0f, 0f, 0f);
            document.add(new Paragraph(documentNameEt.getText().toString()));
            document.add(new Paragraph(makeUserDeets()));
            Bitmap b = null;
            Image image = null;
            Rectangle r = document.getPageSize();
            for (String d : paths[0]) {
                Log.d("senddataobj", d);
                image = Image.getInstance(d);
                b = BitmapFactory.decodeFile(d);
                if (b.getWidth() > b.getHeight()) {
                    image.setRotationDegrees(90);
                    Log.d(d, "rotating");
                }
                b.recycle();
                image.scaleToFit(r.getWidth(), r.getHeight());
                document.add(image);                
            }

            document.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

java.lang.RuntimeException:在java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273)在android.os.AsyncTask $ 3.done(AsyncTask.java:278)处执行doInBackground()时发生错误java.util.concurrent.FutureTask.setException(FutureTask.java:124)在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307)在java.util.concurrent.FutureTask.run(FutureTask.java: 137)在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)在java.util.concurrent.ThreadPoolExecutor $ Worker.run( ThreadPoolExecutor.java:569)at java.lang.Thread.run(Thread.java:856)由以下原因引起:android.graphics.BitmapFactory.nativeDecodeStream(Native Method)处的java.lang.OutOfMemoryError(android.graphics.BitmapFactory.decodeStream( com上android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)上的BitmapFactory.java:493)com上android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)上的BitmapFactory.java:493) .wake.snapshot.CreateDocumentActivity $ CreateAndSendPdf.doInBackground(CreateDocumentActivity.java:315)位于com.wake.up.your.wealth.snapshot.CreateDocumentActivity $ CreateAndSendPdf.doInBackground(CreateDocumentActivity.java:1),位于android.os.AsyncTask $ 2。在java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)处调用(AsyncTask.java:264)...还有5个

因为只需要一个位图大小,所以将BitmapFactory与inJustDecodeBounds选项一起使用http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inJustDecodeBounds ...它将返回空位图,但是您将拥有该位图的大小in outHeight和outWidth

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM