How much memory has your computer got? How much space does the program occupy when processing a small pdf?
-------------------------------------------- On Wed, 10/23/13, anita kulkarni <[email protected]> wrote: Subject: Parsing a large PDF file using PDFBox To: "[email protected]" <[email protected]> Date: Wednesday, October 23, 2013, 3:42 PM Hi I need to put a header and footer to an existing PDF document. This works fine but when the PDF gets large (>18.9 MB) then I get the out of memory problem. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.io.BufferedOutputStream.<init>(BufferedOutputStream.java:59) at org.apache.pdfbox.cos.COSStream.createUnfilteredStream(COSStream.java:459) at org.apache.pdfbox.pdmodel.common.PDStream.createOutputStream(PDStream.java:218) at org.apache.pdfbox.pdmodel.edit.PDPageContentStream.<init>(PDPageContentStream.java:240) at com.akimeka.jmar.pdfwriter.AddFOUOToReport.doIt(AddFOUOToReport.java:83) at com.akimeka.jmar.pdfwriter.AddFOUOToReport.main(AddFOUOToReport.java:137) It is the same code as I had reported a bug in PDF Box. Here is the code for your ref: // the document PDDocument doc = null; File file1 = new File(file); try { //RandomAccessFile raf = new RandomAccessFile(file, "r"); //RandomAccess ra = new RandomAcsess doc = PDDocument.loadNonSeq(file1, null);//load( file ); List<PDPage> allPages = doc.getDocumentCatalog().getAllPages(); PDFont font = PDType1Font.HELVETICA; float fontSize = 15.0f; for( int i=0; i<allPages.size(); i++ ) //int i=0; { System.out.println("i = " + i); PDPage page = (PDPage)allPages.get( i ); PDRectangle pageSize = page.findMediaBox(); float stringWidth = font.getStringWidth( message )*fontSize/1000f; // calculate to center of the page : int rotation = page.findRotation(); boolean rotate = rotation == 90 || rotation == 270; float pageWidth = rotate ? pageSize.getHeight() : pageSize.getWidth(); float pageHeight = rotate ? pageSize.getWidth() : pageSize.getHeight(); double centeredXPosition = rotate ? pageHeight/2f : (pageWidth - stringWidth)/2f; double centeredYPosition = rotate ? (pageWidth - stringWidth)/2f : pageHeight/2f; // append the content to the existing stream PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true,true); page.getResources().getFonts(); contentStream.beginText(); // set font and font size contentStream.setFont( font, fontSize ); //set text color to red //contentStream.setNonStrokingColor(255, 0, 0); if (rotate) { // rotate the text according to the page rotation contentStream.setTextRotation(Math.PI/2, centeredXPosition, 0); } else { contentStream.setTextTranslation(centeredXPosition, 0); } //contentStream.moveTextPositionByAmount(pageWidth/2 - 130, pageHeight-20); contentStream.moveTextPositionByAmount(0, pageHeight-50); contentStream.drawString( message); contentStream.endText(); //Now repeat the same for footer //page.getResources().getFonts(); contentStream.beginText(); // set font and font size //contentStream.setFont( font, fontSize ); contentStream.moveTextPositionByAmount((int)centeredXPosition, 50); contentStream.drawString( message); contentStream.endText(); //Close contentStream. contentStream.close(); } doc.save( outfile ); } Any suggestions you can provide is greatly appreciated. -Anita
