0

I am reading pdf using itext on android platform and i'm using the following code.but when i try to open large pdfs it gives out of memory error on first line i.e. reader = new PdfReader(fileName);.Also below is the satck trace generated when a large file is clicked.

     reader = new PdfReader(fileName);        
     numberOfPages = reader.getNumberOfPages();
     System.out.println("This document contains:" + numberOfPages);
     extractor = new PdfTextExtractor(reader);

    01-23 18:04:50.607: INFO/System.out(428): @@@@!!!/sdcard/Moby_Dick_NT.pdf

external 899K/1038K, paused 202ms
    01-23 18:05:31.298: INFO/dalvikvm(428): Jit: resizing JitTable from 1024 to 2048
    01-23 18:05:32.947: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1678K, 31% free 10361K/14855K, external 899K/1038K, paused 218ms
    01-23 18:05:35.657: DEBUG/dalvikvm(428): GC_CONCURRENT freed 2038K, 31% free 10403K/15047K, external 899K/1038K, paused 5ms+10ms

    01-23 18:06:00.537: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1845K, 30% free 10625K/15111K, external 899K/1038K, paused 9ms+8ms
    01-23 18:06:02.397: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1995K, 32% free 10546K/15303K, external 899K/1038K, paused 259ms
    01-23 18:06:04.518: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1993K, 32% free 10545K/15303K, external 899K/1038K, paused 9ms+5ms
    01-23 18:06:06.468: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1917K, 31% free 10583K/15303K, external 899K/1038K, paused 9ms+5ms
    01-23 18:06:08.008: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.145MB to 16.000MB
    01-23 18:06:08.008: DEBUG/dalvikvm(428): GC_CONCURRENT freed 1542K, 29% free 10981K/15303K, external 899K/1038K, paused 9ms+5ms
   browse.com/.PDFView}
    01-23 18:06:09.338: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.498MB to 16.000MB
    01-23 18:06:09.338: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1370K, 27% free 11342K/15495K, external 899K/1038K, paused 243ms
    01-23 18:06:10.437: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.776MB to 16.000MB
    01-23 18:06:10.437: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 1079K, 25% free 11627K/15495K, external 899K/1038K, paused 228ms
    01-23 18:06:10.857: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.841MB to 16.000MB
    01-23 18:06:10.857: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 256K, 25% free 11694K/15495K, external 899K/1038K, paused 215ms
    01-23 18:06:10.867: INFO/dalvikvm-heap(428): Forcing collection of SoftReferences for 4100-byte allocation
    01-23 18:06:11.137: INFO/dalvikvm-heap(428): Clamp target GC heap from 16.827MB to 16.000MB
    01-23 18:06:11.137: DEBUG/dalvikvm(428): GC_FOR_MALLOC freed 15K, 25% free 11679K/15495K, external 899K/1038K, paused 272ms
    01-23 18:06:11.137: ERROR/dalvikvm-heap(428): Out of memory on a 4100-byte allocation.
    01-23 18:06:11.147: INFO/dalvikvm(428): "main" prio=5 tid=1 RUNNABLE
    01-23 18:06:11.147: INFO/dalvikvm(428):   | group="main" sCount=0 dsCount=0 obj=0x4001f1a8 self=0xce48
Rookie
  • 8,660
  • 17
  • 58
  • 91

1 Answers1

1

There is a related discussion about memory allocation in another thread here on SO:

Android memory allocation

Haven't tried it myself but it might be worthwhile to try the option

android:largeHeap="true"

in the manifest since its hitting the 16MB upper boundary.

Community
  • 1
  • 1
Scalarr
  • 746
  • 7
  • 26
  • but what about the phones which support 16 MB of heap size? – Rookie Jan 24 '12 at 08:19
  • 1
    If they only support 16MB? Tricky, then one would have to read the file sequentially, keeping portions of in in memory at the time so that it never hits the 16MB boundary. Not sure how to do that though. – Scalarr Jan 24 '12 at 09:32