package org.fouram.core.util;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;

public class PdfUtil {

	/**
	 * 图片转pdf
	 * 
	 * @param outPdfPath
	 *            生成pdf文件
	 * @param imagePaths
	 *            需要转换的图片路径的列表
	 */
	public static void imagesToPdf(String outPdfPath, List<String> imagePaths) {
		try {
			File file = new File(outPdfPath);
			if (!file.exists()) {
				file.getParentFile().mkdirs();
			}
			// 第一步：创建一个document对象。
			Document document = new Document();
			document.setMargins(0, 0, 0, 0);
			// 第二步：
			// 创建一个PdfWriter实例，
			PdfWriter.getInstance(document, new FileOutputStream(file));
			// 第三步：打开文档。
			document.open();
			// 第四步：在文档中增加图片。
			for (int i = 0; i < imagePaths.size(); i++) {
				Image img = Image.getInstance(imagePaths.get(i));
				img.setAlignment(Image.ALIGN_CENTER);
				// 根据图片大小设置页面，一定要先设置页面，再newPage（），否则无效
				document.setPageSize(new Rectangle(img.getWidth(), img.getHeight()));
				document.newPage();
				document.add(img);
			}
			// 第五步：关闭文档。
			document.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 合並pdf文件
	 *
	 * @param files
	 *            要合并的文件(文件的绝对路径 { "e:\\1.pdf", "e:\\2.pdf"})
	 * @param newfile
	 *            合并后产生的新文件
	 * @return
	 */
	public static boolean mergePdfFiles(List<String> files, String newFilePath) {
		boolean retValue = false;
		Document document = null;
		try {
			File file = new File(newFilePath);
			if (!file.exists()) {
				file.getParentFile().mkdirs();
			}
			document = new Document(new PdfReader(files.get(0)).getPageSize(1));
			PdfCopy copy = new PdfCopy(document, new FileOutputStream(newFilePath));
			document.open();

			for (int i = 0; i < files.size(); i++) {
				PdfReader reader = new PdfReader(files.get(i));
				int n = reader.getNumberOfPages();
				for (int j = 1; j <= n; j++) {
					document.newPage();
					PdfImportedPage page = copy.getImportedPage(reader, j);
					copy.addPage(page);
				}
			}
			retValue = true;
		} catch (Exception e) {
			LoggerUtil.error(e);
		} finally {
			document.close();
		}
		return retValue;
	}

	public static void main(String[] args) {
		List<String> imagePaths = new ArrayList<>();
		ImageUtil.generateScale("D:\\archives\\004.jpg", "D:\\archives\\004_.jpg", 0.75f, 0.5f);
		imagePaths.add("D:\\archives\\004_.jpg");
		imagesToPdf("D:\\archives\\150202.pdf", imagePaths);
	}
}
