package com.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;

public class ITextTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ITextTest test = new ITextTest();
		Map<InputStream, Boolean> map = new HashMap<InputStream, Boolean>();
		File file = new File("D:/WIP/testhldonotdelete.pdf");
		try {
		    InputStream in = new FileInputStream(file);
		    map.put(in, true);
	        File result = test.mergePages(map, null);
	        System.out.println(result);
        } catch (FileNotFoundException e) {
	       System.out.println( e.getMessage());
        } catch (Exception e) {
 	       System.out.println( e.getMessage());
        }
	}

	public File mergePages(final Map<InputStream, Boolean> map, final String finalPDFSize) throws Exception  {
		final File finalPDFTempFile;
		OutputStream outputStream = null;
		int count = 0;
		com.itextpdf.text.Document document = null;
		try {

			finalPDFTempFile = File.createTempFile("abcd", ".pdf");
			outputStream = new FileOutputStream(finalPDFTempFile);

			document = new com.itextpdf.text.Document(PageSize.A4);
			PdfWriter writer;
			writer = PdfWriter.getInstance(document, outputStream);
			document.open();
			final PdfContentByte cb = writer.getDirectContent();
			PdfReader reader;
			for (final InputStream in : map.keySet()) {
				reader = new PdfReader(in);

				for (int i = 1; i <= reader.getNumberOfPages(); i++) {
					document.setPageSize(reader.getPageSizeWithRotation(i));
					document.newPage();
					count++;
					// import the page from source pdf
					final PdfImportedPage page = writer.getImportedPage(reader, i);
					// add the page to the destination pdf
					cb.addTemplate(page, 0, 0);
					// Changes For Universal Templates: Start
					System.out.println("map.get(in):--->" + map.get(in));
				}
			}

			return finalPDFTempFile;

		} catch (Exception e) {
			throw e;
		} finally {
			if (document != null) {
				document.close();
			}
			if (outputStream != null) {
				try {
					outputStream.flush();
					outputStream.close();
				} catch (IOException e) {
					System.out.println(e.getMessage() + e);
				}
			}
		}
	}

}
