[英]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.