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

Indra Kumar commented on PDFBOX-2290:
-------------------------------------

Hi  Andreas,

I am using below code can you check once. And I am using pdfbox-app-1.8.6 jar 
file. Is this problem for this exception.

package com.merge;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.exceptions.InvalidPasswordException;   
import org.apache.pdfbox.pdfparser.PDFParser;
   
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import 
org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitWidthDestination;
import 
org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import 
org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;
import 
org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineNode;
import org.apache.pdfbox.util.PDFMergerUtility;



public class MergePDFWithPDFBOX {

        /**
         * @param args
         */
        public static void main(String[] args) {
                
                
                PDFMergerUtility mergePdf = new PDFMergerUtility();
                
                int mb = 1024*1024;

              //Getting the runtime reference from system
              Runtime runtime = Runtime.getRuntime();

              System.out.println("##### Heap utilization statistics [MB] 
#####");

              //Print used memory
              System.out.println("Used Memory:"
                  + (runtime.totalMemory() - runtime.freeMemory()) / mb);

              //Print free memory
              System.out.println("Free Memory:"
                  + runtime.freeMemory() / mb);

              //Print total available memory
              System.out.println("Total Memory:" + runtime.totalMemory() / mb);

              //Print Maximum available memory
              System.out.println("Max Memory:" + runtime.maxMemory() / mb);

                
                //PDF files get Load Below Location
              
              String folder = "C://BAckup folder//Bills";
                //String folder = "C://BAckup folder//PDF Files";
              
              System.out.println("folder===="+folder);
                
                //Merged file is Located in below lOcation
                String mergeFileLocation = "C://BAckup 
folder//merge//Destination";
                
                //Merged file With BookMarks is Located in below lOcation
                /*Calendar cal = Calendar.getInstance();
        cal.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        System.out.println( sdf.format(cal.getTime()) );*/
                
                String mergeFileLocationBookM = "C://BAckup 
folder//mergewithbookmark//Destination";
                
                String destinationFileName = "Destination";
                
                String[] files=null;
                try {
                        files = getFiles(folder);
                
                int numberOfFiles=files.length;
                System.out.println("Number of Files=="+numberOfFiles);;
                Calendar cal = Calendar.getInstance();
        cal.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        System.out.println( "Befor Merging==="+sdf.format(cal.getTime()) );
                for(int i = 0; i < numberOfFiles; i++){
                        mergePdf.addSource(folder + File.separator + files[i]);
                }
        
                mergePdf.setDestinationFileName(mergeFileLocation + 
File.separator + destinationFileName+".pdf");
        
                        mergePdf.mergeDocuments();
                        
                        Calendar cala = Calendar.getInstance();
                cal.getTime();
                SimpleDateFormat sdfa = new SimpleDateFormat("HH:mm:ss");
                System.out.println( "After 
Merging==="+sdfa.format(cala.getTime()) );
                } catch (COSVisitorException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                
                  PDDocument document = null;
                   try
                 {
                  try {
                               document = PDDocument.load( mergeFileLocation + 
File.separator + destinationFileName+".pdf" );
                                            } catch (IOException e) {
                                                // TODO Auto-generated catch 
block
                                                e.printStackTrace();
                                            }
                           if( document.isEncrypted() )
                            {
                                      System.err.println( "Error: Cannot add 
bookmarks to encrypted document." );
                                  System.exit( 1 );
                             }
                                PDDocumentOutline outline =  new 
PDDocumentOutline();
                            document.getDocumentCatalog().setDocumentOutline( 
outline );
                            PDOutlineItem pagesOutline = new PDOutlineItem();
                                   pagesOutline.setTitle( "All Pages" );
                                   outline.appendChild( pagesOutline );
                                    List pages = 
document.getDocumentCatalog().getAllPages();
                                  for( int i=0; i<pages.size(); i++ )
                                    {
                                   PDPage page = (PDPage)pages.get( i );
                                       PDPageFitWidthDestination dest = new 
PDPageFitWidthDestination();
                                       dest.setPage( page );
                                       
                                       PDOutlineItem bookmark = new 
PDOutlineItem();
                                       bookmark.setDestination( dest );
                                       bookmark.setTitle( "Pages " + (i+1) );
                                   pagesOutline.appendChild( bookmark );
                                     }
                                       pagesOutline.openNode();
                                       outline.openNode();
                    
                                    try {
                                                                document.save( 
mergeFileLocationBookM + File.separator + destinationFileName+".pdf"  );
                                                        } catch 
(COSVisitorException e) {
                                                                // TODO 
Auto-generated catch block
                                                                
e.printStackTrace();
                                                        } catch (IOException e) 
{
                                                                // TODO 
Auto-generated catch block
                                                                
e.printStackTrace();
                                                        }
                               }
                                 finally
                                 {
                                  if( document != null )
                                  {
                                       try {
                                                                  
document.close();
                                                        } catch (IOException e) 
{
                                                                // TODO 
Auto-generated catch block
                                                                
e.printStackTrace();
                                                        }
                                   }
                               }
        }
        private static String[] getFiles(String folder) throws IOException
        {
                File _folder = new File(folder);
                String[] filesInFolder;   

                if(_folder.isDirectory())
                {
                        filesInFolder = _folder.list();
                        return filesInFolder;
                }
                else
                {
                        throw new IOException("Path is not a directory");
                }
        }

}



> Exception while Merging Large files
> -----------------------------------
>
>                 Key: PDFBOX-2290
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-2290
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Documentation
>    Affects Versions: 1.8.6
>            Reporter: Indra Kumar
>            Priority: Critical
>         Attachments: MergePDFWithPDFBOX.java
>
>
> I am getting below exception while merging large files and it supports only 5 
> to 6 documents only. Can you any one help me?
> org.apache.pdfbox.exceptions.WrappedIOException
>       at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:267)
>       at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1216)
>       at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1183)
>       at 
> org.apache.pdfbox.util.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:236)
>       at 
> org.apache.pdfbox.util.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:185)
>       at com.ls.lsauth.login.business.LsSession.getSession(LsSession.java:615)
>       at 
> jrun__LsAuth__Application__LsLogin__Login__UserRoles2ejsp2f._jspService(jrun__LsAuth__Application__LsLogin__Login__UserRoles2ejsp2f.java:163)
>       at jrun.jsp.runtime.HttpJSPServlet.service(HttpJSPServlet.java:43)
>       at jrun.jsp.JSPServlet.service(JSPServlet.java:119)
>       at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
>       at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
>       at 
> jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
>       at 
> jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
>       at 
> jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
>       at 
> jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
>       at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
> Caused by: java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
>       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:110)
>       at 
> org.apache.pdfbox.io.RandomAccessFileOutputStream.write(RandomAccessFileOutputStream.java:106)
>       at 
> java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
>       at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
>       at java.io.FilterOutputStream.close(FilterOutputStream.java:140)
>       at 
> org.apache.pdfbox.pdfparser.BaseParser.parseCOSStream(BaseParser.java:634)
>       at org.apache.pdfbox.pdfparser.PDFParser.parseObject(PDFParser.java:609)
>       at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:194)
>       ... 15 more



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to