我正在使用itext库来创建图像和文本的pdf。以下代码在4个设备中的3个设备上正常工作,但在第4个设备上,我得到OutOfMemoryException。代码在AsyncTask doinbackground方法中运行,它使用bimtmap对象检查每个jpg文件的旋转(sdcard中的文件的目录),根据高度测量宽度,并在必要时旋转itext Image对象90度。Android itext pdf库OutOfMemoryError
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中$在android.os.AsyncTask $ 3.done(AsyncTask.java:278)执行 doInBackground()时出错Sync.innerSetException(FutureTask.java:273) at java.util.concurrent.FutureTask.setException(FutureTask.java:124) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307) at java.util.concurrent.FutureTask.run(FutureTask.java:137)at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)at java.util.concurrent.ThreadP oolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856)引起: java.lang.OutOfMemoryError在处 android.graphics.BitmapFactory.decodeFile android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493) android.graphics.BitmapFactory.nativeDecodeStream(母语方法)(BitmapFactory.java:299 )在 android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)在 com.wake.snapshot.CreateDocumentActivity $ CreateAndSendPdf.doInBackground(CreateDocumentActivity.java:315) 在 com.wake.up.your.wealth。 snapshot.CreateDocume ntActivity $ CreateAndSendPdf.doInBackground(CreateDocumentActivity.java:1) at android.os.AsyncTask $ 2.call(AsyncTask.java:264)at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)。 .. 5个
有规模有多大的图像(尺寸)?你可能真的内存不足。你是否考虑过按照图像组装文档图像,而不是将它们全部放在内存中? – dmon
谢谢,我使用选项类来获取具有维度的空位图对象,然后在选项对象中使用了调光。 – brux