package cn.com.tdl.base.pdf;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import com.lowagie.text.DocumentException;import com.lowagie.text.pdf.PdfCopyFields;import com.lowagie.text.pdf.PdfReader;/**
* 两个pdf文件合并. 多文件合并;
*
* @author liuhualiang
*
*/publicclassMyMergePDF{/**
* @param args
* @throws IOException
* @throws DocumentException
*/publicstaticvoidmain(String[] args){// creating list of readers of pdf filestry{
PdfReader reader1 =newPdfReader("D://A.pdf");
PdfReader reader2 =newPdfReader("D://B.pdf");
List<PdfReader> pdfReaderList =newArrayList<PdfReader>();// Adding readers to the files
pdfReaderList.add(reader1);
pdfReaderList.add(reader2);// Creating the PdfCopyFields// This copy field object will take the reader object and copy the// pages to its object(copy)// So just by adding a document we can create a PDF with your merged// pdf
PdfCopyFields copy =newPdfCopyFields(newFileOutputStream("D://Output.pdf"));
copy.open();if(null != pdfReaderList &&!pdfReaderList.isEmpty()){
Iterator<PdfReader> iter = pdfReaderList.iterator();while(iter.hasNext()){
String pageNOs ="";
PdfReader pdfReader =(PdfReader) iter.next();int noOfPages = pdfReader.getNumberOfPages();if(noOfPages >0){
pageNOs =getNumderOfPages(noOfPages);}
copy.addDocument(pdfReader, pageNOs);}}
copy.close();}catch(DocumentException e){
e.printStackTrace();}catch(FileNotFoundException e){
e.printStackTrace();}catch(IOException e){
e.printStackTrace();}}/**
* PDF文件合并
*
* @param file1
* @param file2
* @param outFile
* @throws Throwable
*/publicstaticvoidmergePdfs(String file1, String file2, String outFile)throws Throwable {// creating list of readers of pdf filestry{// 文件不存在处理if(!newFile(file1).exists()){
System.out.println("file:"+ file1 +"不存在");
outFile = file2;return;}if(!newFile(file2).exists()){
System.out.println("file:"+ file2 +"不存在");
outFile = file1;return;}
PdfReader reader1 =newPdfReader(file1);
PdfReader reader2 =newPdfReader(file2);
List<PdfReader> pdfReaderList =newArrayList<PdfReader>();// Adding readers to the files
pdfReaderList.add(reader1);
pdfReaderList.add(reader2);// Creating the PdfCopyFields// This copy field object will take the reader object and copy the// pages to its object(copy)// So just by adding a document we can create a PDF with your merged// pdf
PdfCopyFields copy =newPdfCopyFields(newFileOutputStream(outFile));
copy.open();if(null != pdfReaderList &&!pdfReaderList.isEmpty()){
Iterator<PdfReader> iter = pdfReaderList.iterator();while(iter.hasNext()){
String pageNOs ="";
PdfReader pdfReader =(PdfReader) iter.next();int noOfPages = pdfReader.getNumberOfPages();if(noOfPages >0){
pageNOs =getNumderOfPages(noOfPages);}
copy.addDocument(pdfReader, pageNOs);}}
copy.close();}catch(DocumentException e){thrownewThrowable(e);}catch(FileNotFoundException e){thrownewThrowable(e);}catch(IOException e){thrownewThrowable(e);}finally{if(newFile(file1).exists()){newFile(file1).delete();}if(newFile(file2).exists()){newFile(file2).delete();}}}/**
* 多文件合并.
*
* @param arrPdfFile
* @param outFile
* @throws Throwable
*/publicstaticvoidmergePdfs(String[] arrPdfFile, String outFile)throws Throwable {// creating list of readers of pdf filestry{// 文件不存在处理
List<PdfReader> pdfReaderList =newArrayList<PdfReader>();for(int i =0; i < arrPdfFile.length; i++){
PdfReader reader2 =newPdfReader(arrPdfFile[i]);// Adding readers to the files
pdfReaderList.add(reader2);}// Creating the PdfCopyFields// This copy field object will take the reader object and copy the// pages to its object(copy)// So just by adding a document we can create a PDF with your merged// pdf
PdfCopyFields copy =newPdfCopyFields(newFileOutputStream(outFile));
copy.open();if(null != pdfReaderList &&!pdfReaderList.isEmpty()){
Iterator<PdfReader> iter = pdfReaderList.iterator();while(iter.hasNext()){
String pageNOs ="";
PdfReader pdfReader =(PdfReader) iter.next();int noOfPages = pdfReader.getNumberOfPages();if(noOfPages >0){
pageNOs =getNumderOfPages(noOfPages);}
copy.addDocument(pdfReader, pageNOs);}}
copy.close();}catch(DocumentException e){thrownewThrowable(e);}catch(FileNotFoundException e){thrownewThrowable(e);}catch(IOException e){thrownewThrowable(e);}finally{for(int i =0; i < arrPdfFile.length; i++){if(newFile(arrPdfFile[i]).exists()){newFile(arrPdfFile[i]).delete();}}}}/**
* Function to get page numbers in string with comma separated
*
* @param noOfPages
* @return
*/privatestatic String getNumderOfPages(int noOfPages){
String pageNOs ="";boolean flag =false;for(int i =0; i < noOfPages; i++){if(flag ==true){
Integer c =(Integer) i;
pageNOs = pageNOs.concat(","+ c.toString());}if(flag ==false){
Integer c =(Integer) i;
pageNOs = c.toString();
flag =true;}}return pageNOs;}}