serge zr created PDFBOX-2404:
--------------------------------

             Summary: OutOfMemory or/and IndexOutOfBounds while creating a pdf 
with lots of images
                 Key: PDFBOX-2404
                 URL: https://issues.apache.org/jira/browse/PDFBOX-2404
             Project: PDFBox
          Issue Type: Bug
    Affects Versions: 1.8.7
         Environment: Windows 7/ Eclipse
            Reporter: serge zr


Hi Folks,
I try to create PDFs with full page images (as they come from a scanner).
First I got OutOfMemoryError(exception one) after second page (which is already 
not nice).  
I gave the process more memory (1G) and got the second Exception.
The code breaks around 17 pages with the second exception (IndexOutOfBounds). 
The image in this example was taken from the internet as I can not provide the 
original, but produces the same issue. 
Another remark - the production is quite slow...

//---------------Start Code----------
package test;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;

import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;

public class PDFCreatorTest {
        public static void main(String[] args) {

                try {
                        createPDF("new.pdf");
                } catch (COSVisitorException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }

        private static void createPDF(String pdffile) throws IOException,
                        COSVisitorException {

                PDDocument doc = null;
                try {
                        doc = new PDDocument();

                        int tstsize = 30;
                        for (int pid = 0; pid < tstsize; pid++) {

                                System.out.println("Create page: " + pid + " of 
" + tstsize
                                                + "...");
                                PDPage page = new PDPage();
                                doc.addPage(page);

                                BufferedImage tmp_image = ImageIO
                                                .read(new URL(
                                                                
"http://carolhagen.files.wordpress.com/2013/06/skewed-demo_wilhomebw-page-001.jpg";));
                                PDRectangle box = // page.getCropBox();
                                page.getMediaBox();
                                BufferedImage image = new 
BufferedImage(tmp_image.getWidth(),
                                                tmp_image.getHeight(), 
BufferedImage.TYPE_4BYTE_ABGR);
                                
image.createGraphics().drawRenderedImage(tmp_image, null);

                                PDXObjectImage ximage = new PDPixelMap(doc, 
image);

                                PDPageContentStream contentStream = new 
PDPageContentStream(
                                                doc, page, true, true);

                                float scale = box.getHeight() / 
ximage.getHeight();
                                contentStream.drawXObject(ximage, 0, 0, 
ximage.getWidth()
                                                * scale, ximage.getHeight() * 
scale);

                                contentStream.close();
                                System.out.println("Page: " + pid + " 
created!");

                                
                        }
                        System.out.println("Save document" + pdffile);
                        doc.save(pdffile);
                } catch (Exception e) {
                        e.printStackTrace();
                } finally {
                        if (doc != null) {
                                doc.close();
                        }

                }
        }
}

//---------------End Code-------------

//--------------------------- Exception one
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.awt.image.DataBufferByte.<init>(Unknown Source)
        at java.awt.image.Raster.createInterleavedRaster(Unknown Source)
        at java.awt.image.BufferedImage.<init>(Unknown Source)
        at 
org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap.createImageStream(PDPixelMap.java:130)
        at 
org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap.<init>(PDPixelMap.java:87)
        at test.PDFCreatorTest.createPDF(PDFCreatorTest.java:65)
        at test.PDFCreatorTest.main(PDFCreatorTest.java:34)

//-------------Exception two----------
java.lang.IndexOutOfBoundsException: Index: 141, Size: 141
        at java.util.ArrayList.rangeCheck(Unknown Source)
        at java.util.ArrayList.get(Unknown Source)
        at 
org.apache.pdfbox.io.RandomAccessBuffer.seek(RandomAccessBuffer.java:110)
        at 
org.apache.pdfbox.io.RandomAccessFileOutputStream.write(RandomAccessFileOutputStream.java:106)
        at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
        at java.io.BufferedOutputStream.flush(Unknown Source)
        at java.io.FilterOutputStream.close(Unknown Source)
        at 
org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap.createImageStream(PDPixelMap.java:233)
        at 
org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap.<init>(PDPixelMap.java:102)
        at 
org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap.createImageStream(PDPixelMap.java:222)
        at 
org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap.<init>(PDPixelMap.java:87)
        at test.PDFCreatorTest.createPDF(PDFCreatorTest.java:56)
        at test.PDFCreatorTest.main(PDFCreatorTest.java:21)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to