[ 
https://issues.apache.org/jira/browse/PDFBOX-3474?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15439117#comment-15439117
 ] 

Nehal edited comment on PDFBOX-3474 at 8/26/16 2:22 PM:
--------------------------------------------------------

I tried following..but still seeing out of memory when testing with multiple 
threads (5 to10)..simulating multiple user trying to do the same

MemoryUsageSetting memorySetting = MemoryUsageSetting.setupTempFileOnly();
memorySetting.setTempDir(new File("C:\\temp\\pdfbox\\"));

MemoryUsageSetting memorySetting = MemoryUsageSetting.setupMixed();
memorySetting.setTempDir(new File("C:\\temp\\pdfbox\\"));

My usecase is to convert each page in PDF to image and return all images back 
as part of webservice response. I have a limit of 5MB in total for converting 
PDF to images.  If I am not keeping them in list what are other options?

I have also increased my heap settings to 512MB(min) & 1024MB(max). The problem 
I am seeing is when multiple users/threads trying to do the same


was (Author: nehalshah50):
I tried following..but still seeing out of memory when testing with multiple 
threads (5 to10)..simulating multiple user trying to do the same

MemoryUsageSetting memorySetting = MemoryUsageSetting.setupTempFileOnly();
memorySetting.setTempDir(new File("C:\\temp\\pdfbox\\"));

MemoryUsageSetting memorySetting = MemoryUsageSetting.setupMixed();
memorySetting.setTempDir(new File("C:\\temp\\pdfbox\\"));

My usecase is to convert each page in PDF to image and return all images back 
as part of webservice response. I have a limit of 5MB in total for converting 
PDF to images.  If I am not keeping them in list what are other options?

> OutofMemoryError while converting pdf to image
> ----------------------------------------------
>
>                 Key: PDFBOX-3474
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-3474
>             Project: PDFBox
>          Issue Type: Bug
>          Components: PDModel
>    Affects Versions: 2.0.2
>         Environment: Development
>            Reporter: Nehal
>            Priority: Blocker
>
> Our test PDF contain 4-5 pages with one images in each page. Our requirement 
> is to convert each page to image. While doing load testing on this use case 
> (about 10-15 threads), JVM runs out of memory with following error.
> Caused by: java.lang.OutOfMemoryError: Java heap space
>       at 
> org.apache.pdfbox.io.ScratchFileBuffer.addPage(ScratchFileBuffer.java:121)
>       at 
> org.apache.pdfbox.io.ScratchFileBuffer.ensureAvailableBytesInPage(ScratchFileBuffer.java:184)
>       at 
> org.apache.pdfbox.io.ScratchFileBuffer.write(ScratchFileBuffer.java:236)
>       at 
> org.apache.pdfbox.io.ScratchFileBuffer.write(ScratchFileBuffer.java:220)
>       at 
> org.apache.pdfbox.io.RandomAccessOutputStream.write(RandomAccessOutputStream.java:52)
>       at org.apache.pdfbox.filter.DCTFilter.decode(DCTFilter.java:174)
>       at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:69)
>       at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:163)
>       at 
> org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:235)
>       at 
> org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createInputStream(PDImageXObject.java:565)
>       at 
> org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.from8bit(SampledImageReader.java:233)
>       at 
> org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.getRGBImage(SampledImageReader.java:138)
>       at 
> org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:340)
>       at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:793)
>       at 
> org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:62)
>       at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:815)
>       at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:472)
>       at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:446)
>       at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149)
>       at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:189)
>       at 
> org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:208)
>       at 
> org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:139)
>       at 
> org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:94)
> CODE:
>       private List<Image> convertPDFToImage(ByteArrayOutputStream pdf) throws 
> AXOLServiceException, IOException{
>                       
>                       List<Image> images =new ArrayList<Image>();
>                       
>                       PDDocument document = 
> PDDocument.load(pdf.toByteArray(),"",null,null,MemoryUsageSetting.setupMainMemoryOnly(5347737));
>                       
>                       PDFRenderer pdfRenderer = new PDFRenderer(document);
>                       long contentLength = 0;
>                       for (int page = 0; page < document.getNumberOfPages(); 
> ++page)
>                       { 
>                           BufferedImage bim = 
> pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
>                           ByteArrayOutputStream tmp = new 
> ByteArrayOutputStream();
>                           ImageIO.write(bim, "jpeg", tmp);
>                           tmp.flush();
>                           tmp.close();
>                           bim.flush();
>                           
>                           contentLength += tmp.size();
>                          
>                           if(contentLength>5347737){
>                               document.close();
>                                       throw new RuntimeException("Exceeds 
> maximum allowed size limit", 
> EAUDocumentService.EAU_ERR_CODE_EXCCEDS_SIZE_LIMIT, "");                      
>  
>                           }
>                           images.add(bim);
>                       }
>                       document.close();
>                       return images;
>               }



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to