How to merge several pdf?

View: New views
2 Messages — Rating Filter:   Alert me  

How to merge several pdf?

by Pills :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello guys,

I have a little question. I use jasperreport to generate some pdf files. My use case requires to merge some pdf together (append a pdf at the end of another) to print them all at one time.

How can I do that?

Thank you ;)

Re: How to merge several pdf?

by Pills :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Pills wrote:
Hello guys,

I have a little question. I use jasperreport to generate some pdf files. My use case requires to merge some pdf together (append a pdf at the end of another) to print them all at one time.

How can I do that?

Thank you ;)
Thanks. I found it (with iText):

    public static void merge(List<InputStream> streamOfPDFFiles, OutputStream outputStream) throws IOException, DocumentException {
        Document document = new Document();
        try {
            List<InputStream> pdfs = streamOfPDFFiles;
            List<PdfReader> readers = new ArrayList<PdfReader>();
            int totalPages = 0;
            Iterator<InputStream> iteratorPDFs = pdfs.iterator();

            while (iteratorPDFs.hasNext()) {
                InputStream pdf = iteratorPDFs.next();
                PdfReader pdfReader = new PdfReader(pdf);
                readers.add(pdfReader);
                totalPages += pdfReader.getNumberOfPages();
            }

            PdfWriter writer = PdfWriter.getInstance(document, outputStream);
           
            document.open();
            PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
           
            PdfImportedPage page;
            int currentPageNumber = 0;
            int pageOfCurrentReaderPDF = 0;
            Iterator<PdfReader> iteratorPDFReader = readers.iterator();
           
            while (iteratorPDFReader.hasNext()) {
                PdfReader pdfReader = iteratorPDFReader.next();
               
                while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
                    document.newPage();
                    pageOfCurrentReaderPDF++;
                    currentPageNumber++;
                    page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
                    cb.addTemplate(page, 0, 0);
                   
                }
                pageOfCurrentReaderPDF = 0;
            }

            outputStream.flush();
        } finally {
            if (document.isOpen()) {
                document.close();
            }
            closeNoExc(outputStream);
        }        
    }
LightInTheBox - Buy quality products at wholesale price