Some lines are missing??!!
Can you explain that better? PDFs work page by page and if the same
documents work from file they will certainly work the same way from a byte
array.

Best Regards,
Paulo Soares

----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, August 22, 2003 9:54
Subject: [iText-questions] Merge PDF-documents from byte[] to new byte[]
and/or servlet response...


> Hi there
>
> I'm also trying to accomplish concatenation between n -number of
> PDF-documents...
> I'm using XSL-FO and Apache FOP to create my PDF's but sometimes I need
> to concat multiple PDF documents. I'm no java expert but I've tried to
> create an other version of com.lowagie.tools.concat_pdf from the iText
> (version 1.0) project called MergePdfByteArrays. The concat_pdf class
> works just fine from a command-tool but I'm hold my pdf-documents as
> byte[] in memory, not as files and my output is either a database or as
> HTTP response from a servlet... My code don't through any exceptions and
> the document seems to be generated the same source code the concat_pdf
> except that some lines at the end of the file i missing ;(...
> A buffer/fushing problem???
> Here is my code for MergePdfByteArrays and a testing servlet.
>
>
>
>
>
> package mypackage;
>
>
>
> import java.io.*;
>
>
>
> import com.lowagie.text.*;
>
> import com.lowagie.text.pdf.*;
>
>
>
> /**
>
> * This class concat PDF-files stored in byte[]'s in memory
>
> * @author Erik Gulliksen
>
> */
>
>
>
> public class MergePdfByteArrays
>
>     {
>
>     private ByteArrayOutputStream outStream = new
> ByteArrayOutputStream();
>
>     private Document document = null;
>
>     private PdfCopy  writer = null;
>
>
>
>     public MergePdfByteArrays()
>
>         { super(); }
>
>
>
>     ByteArrayOutputStream getOutputStream()
>
>         { return this.outStream; }
>
>
>
>     void setOutputStream(ByteArrayOutputStream outStreamInput)
>
>         { this.outStream = outStreamInput; }
>
>
>
>     public byte[] getMergedPdfByteArray()
>
>         {
>
>         if(this.outStream != null )
>
>             { return this.outStream.toByteArray(); }
>
>         else
>
>             { return null;}
>
>         }
>
>
>
>     public void add(byte[] pdfByteArray)
>
>         {
>
>         try
>
>             {
>
>             PdfReader reader = new PdfReader(pdfByteArray);
>
>             int numberOfPages = reader.getNumberOfPages();
>
>
>
>             if(this.document == null)
>
>                 {
>
>                 this.document = new
> Document(reader.getPageSizeWithRotation(1));
>
>                 this.writer = new PdfCopy( this.document,
> this.getOutputStream() );
>
>                 this.document.open();
>
>                 }
>
>             PdfImportedPage page;
>
>             for(int i = 0; i < numberOfPages; )
>
>                 {
>
>                 ++i;
>
>                 page = this.writer.getImportedPage(reader, i);
>
>                 this.writer.addPage(page);
>
>                 }
>
>             PRAcroForm form = reader.getAcroForm();
>
>             if(form != null)
>
>                 { this.writer.copyAcroForm(reader); }
>
>             }
>
>         catch(Exception e)
>
>             { e.printStackTrace(); }
>
>         }
>
>
>
>     public void close()
>
>         {
>
>         try
>
>             {
>
>             this.document.close();
>
>             this.outStream.close();
>
>             }
>
>         catch(Exception e)
>
>             { e.printStackTrace(); }
>
>         }
>
>
>
>     }
>
>
>
>
>
>
>
> /***********************************************
>
> *** - Test of MergePdfByteArrays, servlet - ***
>
> ***********************************************/
>
>
>
> package mypackage;
>
>
>
> import com.lowagie.tools.*;
>
>
>
> import java.io.*;
>
> import javax.servlet.*;
>
> import javax.servlet.http.HttpServletRequest;
>
> import javax.servlet.http.HttpServletResponse;
>
> import javax.servlet.http.HttpServlet;
>
> import javax.servlet.http.*;
>
> import mypackage.*;
>
>
>
> public class TestMerge extends HttpServlet
>
>     {
>
>     private static final String CONTENT_TYPE = "application/pdf";
>
>
>
>     public void init(ServletConfig config) throws ServletException
>
>         { super.init(config); }
>
>
>
>     public void doGet(HttpServletRequest request, HttpServletResponse
> response) throws
>
>             ServletException, IOException
>
>         { this.doPost( request, response); }
>
>
>
>     public void doPost(HttpServletRequest request, HttpServletResponse
> response) throws
>
>             ServletException, IOException
>
>         {
>
>         response.setContentType(CONTENT_TYPE);
>
>         response.setHeader("Content-disposition", "inline;
> filename=test.pdf");
>
>         ServletOutputStream out = response.getOutputStream();
>
>         try
>
>             {
>
>             // Testing with the same two file that worked vel with
> command-line tool
>
>             File docA = new File("C:\\test\\fileA.pdf");
>
>             File docB = new File("C:\\test\\fileB.pdf");
>
>
>
>             byte[] byteA = new byte[ (int)docA.length() ];
>
>             byte[] byteB = new byte[ (int)docB.length() ];
>
>
>
>             FileInputStream fileInStreamA = new FileInputStream(docA);
>
>             FileInputStream fileInStreamB = new FileInputStream(docB);
>
>
>
>             fileInStreamA.read(byteA);
>
>             fileInStreamB.read(byteB);
>
>
>
>             MergePdfByteArrays pdfMerger = new MergePdfByteArrays();
>
>             pdfMerger.add(byteA);
>
>             pdfMerger.add(byteB);
>
>             ByteArrayOutputStream finalOutStream =
> pdfMerger.getOutputStream();
>
>
>
>             response.setContentLength(finalOutStream.size());
>
>             finalOutStream.writeTo(out);
>
>             out.flush();
>
>             pdfMerger.close();
>
>             }
>
>         catch(IOException ioe)
>
>             { ioe.printStackTrace(); }
>
>
>
>         out.close();
>
>         }
>
>     }
>
>
>
>
> Do some know a solution to my problem, or do anyone have a different
> aproache that works?
> Thanks!
>
> -Erik
>
>



-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines
at the same time. Free trial click here:http://www.vmware.com/wl/offer/358/0
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Reply via email to