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