[
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)