Hi I've a problem when merging multiple PDFs in-memory to one single document (I calle it CompoundDocument). I use the iText library. I extracted some code out of the commandline tool "concat_pdf" and adjusted the logic to read the documents from bytearraystreams instead of reading files (please see the source code snippets below). I assume that the merging of the docs works well, because if I run the code I can see the logstatements quite immediately:
>Create pdf ... DONE! >Write pdf to output stream... >Processed page 1 >Processed page 2 >Processed page 3 >Processed page 1 >Processed page 2 >Write pdf to output stream... DONE! --> This takes about 200 milli seconds The Problem is, that the time consumed until the PDF is finally displayed in the browser is about 20 seconds! I test the application locally (using Tomcat). The PDF produced is of size 200Kb. I assume that there must be something like a timeout that takes place... Have anybody ever had a similar problem? Any hints? Any help is appreciated! Many thanks Silvio ----------------------8<------------------------------------------------ ---- Code Snippet of Merging Class(CompoundDocument): ================================================ public void writeTo(OutputStream inStream) throws MyDocumentException { int i=0; Document lDocument = null; PdfCopy lWriter = null; for (Iterator lIterator = documents.iterator(); lIterator.hasNext();i++) { try { //get content of actual delegated document MyDocument lMyDocument = (MyDocument)lIterator.next(); ByteArrayOutputStream lStream = new ByteArrayOutputStream(); //fixme (shd) here we could directly get the stream from the document //instead of writing the whole data to a "tempstream" to be able to read it lMyDocument.writeTo(lStream); PdfReader lReader = new PdfReader(lStream.toByteArray()); if (i == 0) { //create (single) target document instance lDocument = new Document(lReader.getPageSizeWithRotation(1)); //we create writer to write into global stream lWriter = new PdfCopy(lDocument, inStream); //open target document instance lDocument.open(); } //read in page by page int n = lReader.getNumberOfPages(); for(int j = 1; j <= n; j++) { PdfImportedPage lPage = lWriter.getImportedPage(lReader, j); lWriter.addPage(lPage); cLogger.info("Processed page " + j); lWriter.flush(); } lStream.flush(); lStream.close(); lWriter.flush(); } catch (DocumentException ex) { cLogger.error("Error writing pdf to stream!", ex); throw new MyDocumentException(ex); } catch (IOException ex) { cLogger.error("Error writing pdf to stream!", ex); throw new MyDocumentException(ex); } } if (lWriter != null) { lWriter.close(); } if (lDocument != null) { lDocument.close(); } } Servlet (Struts Action): ======================== public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ... MyDocument lCompoundDocument = new CompountDocument(); //add some documents here //make sure each document itelfs write the pdf to its own byte output stream try { cLogger.debug("Create pdf ... DONE!"); //fill up response response.setContentType(CONTENT_TYPE_PDF); response.setContentLength(lDocument.size()); response.setBufferSize(0); response.setHeader("Content-disposition", "inline; filename=\"sample.pdf\""); response.setHeader("Cache-Control", "max-age=30"); response.setHeader("Pragma", "no-cache"); response.flushBuffer(); cLogger.debug("Write pdf to output stream..."); ServletOutputStream lStream = response.getOutputStream(); lDocument.writeTo(lStream); //see the method above lStream.flush(); response.flushBuffer(); cLogger.debug("Write pdf to output stream... DONE!"); lStream.close(); } catch (IOException ex) { throw new MyException(ex); } catch (Exception ex) { cLogger.error("Exception occured during creating a document", ex); throw new MyException(ex); } return null; } ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_idt12&alloc_id344&op=click _______________________________________________ iText-questions mailing list iText-questions@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/itext-questions