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

Javier García Sánchez commented on PDFBOX-1677:
-----------------------------------------------

I just make a test saving the pdfFile(byte[] pdf) in disk. The pdf file is 
correct and the size is the same that log shows.
I attach an image and the trace log:

-->log:

2013-07-31 13:46:32,354 INFO  (GenerarBonoServlet.java:279) BONO - Generating 
Bono as: image
2013-07-31 13:46:34,441 INFO  (GenerarBonoServlet.java:294) BONO - 
ByteArrayOutputStream pdfFromHTML size: 95636
2013-07-31 13:46:34,457 INFO  (Utils.java:1545) BONO - 
Utils.getImageOutputStreamFromPdfFile (byte[] inputPDF length:95636)
2013-07-31 13:46:35,138 ERROR (Utils.java:1627) BONO - 
Utils.getImageOutputStreamFromPdfFile-->java.lang.IndexOutOfBoundsException: 
Index: 6, Size: 0
        at java.util.ArrayList.RangeCheck(ArrayList.java:547)
        at java.util.ArrayList.get(ArrayList.java:322)
        at 
org.apache.pdfbox.io.RandomAccessBuffer.seek(RandomAccessBuffer.java:84)
        at 
org.apache.pdfbox.io.RandomAccessFileInputStream.read(RandomAccessFileInputStream.java:96)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
        at java.io.FilterInputStream.read(FilterInputStream.java:66)
        at java.io.PushbackInputStream.read(PushbackInputStream.java:122)
        at 
org.apache.pdfbox.io.PushBackInputStream.read(PushBackInputStream.java:91)
        at 
org.apache.pdfbox.pdfparser.BaseParser.parseCOSString(BaseParser.java:949)
        at 
org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:270)
        at 
org.apache.pdfbox.pdfparser.PDFStreamParser.access$000(PDFStreamParser.java:46)
        at 
org.apache.pdfbox.pdfparser.PDFStreamParser$1.tryNext(PDFStreamParser.java:182)
        at 
org.apache.pdfbox.pdfparser.PDFStreamParser$1.hasNext(PDFStreamParser.java:194)
        at 
org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:255)
        at 
org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:235)
        at 
org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:215)
        at org.apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.java:125)
        at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:781)
        at org.apache.pdfbox.pdmodel.PDPage.convertToImage(PDPage.java:712)
        at 
com.transhotel.BONO.util.Utils.getImageOutputStreamFromPdfFile(Utils.java:1579)
        at 
com.transhotel.BONO.servlet.GenerarBonoServlet.service(GenerarBonoServlet.java:295)
        at 
weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
        at 
weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
        at 
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
        at 
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
        at 
weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3590)
        at 
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at 
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
        at 
weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2200)
        at 
weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2106)
        at 
weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1428)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

-->pdfFile properties: 93,3 KB (95.636 bytes)


                
> PDPage.convertToImage() throw java.lang.IndexOutOfBoundsException
> -----------------------------------------------------------------
>
>                 Key: PDFBOX-1677
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-1677
>             Project: PDFBox
>          Issue Type: Bug
>          Components: PDFReader, PDModel, Utilities
>    Affects Versions: 1.8.1, 1.8.2
>         Environment: JSF1.1+ PdfBox1.8.2+Tomcat (and Weblogic)
>            Reporter: Javier García Sánchez
>              Labels: PDPage,, convertToImage(), 
> java.lang.IndexOutOfBoundsException
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> Sometimes, a random times, the method PDPage.convertToImage() throw an 
> exception like java.lang.IndexOutOfBoundsException. 
> I said sometimes, because is a ramdom process which i cannot understand.
> This is my code:
> public byte[] getImageOutputStreamFromPdfFile (byte[] inputPDF) throws 
> IOException,Exception{
>                       logger.info("Utils.getImageOutputStreamFromPdfFile 
> (byte[] inputPDF)");
>                       //resultado
>                       byte[] result=null;
>                       
>                       if (inputPDF!=null && inputPDF.length>0){
>                               long time = System.currentTimeMillis();
>                               
>                               InputStream isPDF = null;
>                               
>                               
>                               //imagen resultado
>                               ByteArrayOutputStream imageOutputStream = null;
>                               
>                               try{
>                                       isPDF = new 
> ByteArrayInputStream(inputPDF);
>                                       imageOutputStream = new 
> ByteArrayOutputStream();
>                                       
>                                       //pdf
>                                       PDDocument document = 
> PDDocument.load(isPDF, true);
>                                       @SuppressWarnings("unchecked")
>                                       List<PDPage> pages = 
> document.getDocumentCatalog().getAllPages();
>                                       List<BufferedImage> imagesList = new 
> ArrayList<BufferedImage>(
>                                                       pages.size());
>               
>                                       PDPage pDPage = null;
>                                       BufferedImage auxImage = null;
>                                       // width y height final image 
>                                       int maxWidth = 0;
>                                       int totalHeight = 0;
>                                       for (int i = 0; i < pages.size(); i++) {
>                                               pDPage = pages.get(i);
>               
>                                               // get Image Page
>                                               auxImage = 
> pDPage.convertToImage();
>                                               
>                                               auxImage.flush();
>                                               // maxWidth
>                                               if (auxImage.getWidth() > 
> maxWidth) {
>                                                       maxWidth = 
> auxImage.getWidth();
>                                               }
>               
>                                               // totalHeight
>                                               totalHeight += 
> auxImage.getHeight();
>               
>                                               // add image to the list
>                                               imagesList.add(i, auxImage);
>                                       }
>               
>                                       BufferedImage bImageFromConvert = new 
> BufferedImage(maxWidth,
>                                                       totalHeight, 
> BufferedImage.TYPE_INT_ARGB);
>               
>                                       Graphics g = 
> bImageFromConvert.getGraphics();
>               
>                                       int auxHeightDraw = 0;
>                                       for (BufferedImage img : imagesList) {
>                                               g.drawImage(img, 0, 
> auxHeightDraw, null);
>                                               auxHeightDraw += 
> img.getHeight();
>                                       }
>               
>                                       imagesList.clear();
>                                       
>                                       ImageIO.write(bImageFromConvert, 
> ConstantesProperties.EXTENSION_IMAGE, imageOutputStream);
>                                       
>                                                                               
>                                       result=imageOutputStream.toByteArray();
>                                       
>                                                                       
>                                       
> logger.info("Utils.getImageOutputStreamFromPdfFile --> OK: Generation 
> time:"+(System.currentTimeMillis()-time));
>                                       
>                               }catch (IOException e) {
>                                       
>                                       
> logger.error("Utils.getImageOutputStreamFromPdfFile-->"+Utils.stackTraceToString(e));
>                                       result=null;
>                                       throw e;
>                                       
>                               }catch (Exception e) {
>                                       
>                                       
> logger.error("Utils.getImageOutputStreamFromPdfFile-->"+Utils.stackTraceToString(e));
>                                       result=null;
>                                       throw e;
>                                       
>                               }finally{
>                                       
>                                       if (isPDF!=null){
>                                               isPDF.close();
>                                       }
>                                       if (imageOutputStream!=null){
>                                               imageOutputStream.close();
>                                       }
>                                       
>                               }//end finally
>                       }//end if
>                       return result;
>               }//end getImageOutputStreamFromPdfFile

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to