合并多个PDF文件

import com.lowagie.text.Document;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;

 

 

 

@Override
public Map<String, String> beachPrintPDF(ComSvcCaller params) throws DAOException {
String searialno = params.getProperty("serialno");
String usercode = params.getProperty("usercode");
String filePath = params.getProperty("filePath");
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
String strdate = format.format(new Date());
String fileName=usercode+"_"+strdate+".pdf";
List<InputStream> pdfs=new ArrayList<InputStream>();
String[] faxnoArr = StringUtils.split(searialno, ",");
String[] values = new String[faxnoArr.length];

for(int i=0;i<faxnoArr.length;i++){
values[i] = "'"+faxnoArr[i]+"'";
}
String interArray=Arrays.toString(values).replace('[', '(').replace(']', ')');
try {
pdfs = getFiles(interArray);
File file = new File (filePath);
if(file.exists()){
}else{
file.mkdir();//如果不存在文件夹,则创建
}

OutputStream output = new FileOutputStream(filePath+"\\"+fileName);
concatPDFs(pdfs, output, false);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


Map map = new HashMap();
map.put("fileName", fileName);

return map;
}

public static void concatPDFs(List<InputStream> streamOfPDFFiles,
OutputStream outputStream, boolean paginate) {

Document document = new Document();
try {
List<InputStream> pdfs = streamOfPDFFiles;
List<PdfReader> readers = new ArrayList<PdfReader>();
int totalPages = 0;
Iterator<InputStream> iteratorPDFs = pdfs.iterator();

// Create Readers for the pdfs.
while (iteratorPDFs.hasNext()) {
InputStream pdf = iteratorPDFs.next();
PdfReader pdfReader = new PdfReader(pdf);
readers.add(pdfReader);
totalPages += pdfReader.getNumberOfPages();
}
// Create a writer for the outputstream
PdfWriter writer = PdfWriter.getInstance(document, outputStream);

document.open();
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
PdfContentByte cb = writer.getDirectContent(); // Holds the PDF
// data

PdfImportedPage page;
int currentPageNumber = 0;
int pageOfCurrentReaderPDF = 0;
Iterator<PdfReader> iteratorPDFReader = readers.iterator();

// Loop through the PDF files and add to the output.
while (iteratorPDFReader.hasNext()) {
PdfReader pdfReader = iteratorPDFReader.next();

// Create a new page in the target for each source page.
while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
document.newPage();
pageOfCurrentReaderPDF++;
currentPageNumber++;
page = writer.getImportedPage(pdfReader,
pageOfCurrentReaderPDF);
cb.addTemplate(page, 0, 0);

// Code for pagination.
if (paginate) {
cb.beginText();
cb.setFontAndSize(bf, 9);
cb.showTextAligned(PdfContentByte.ALIGN_CENTER, ""
+ currentPageNumber + " of " + totalPages, 520,
5, 0);
cb.endText();
}
}
pageOfCurrentReaderPDF = 0;
}
outputStream.flush();
document.close();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (document.isOpen())
document.close();
try {
if (outputStream != null)
outputStream.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}

/**
*
* @param folder
* @return
* @throws IOException
*/
private List<InputStream> getFiles(String searialno) throws IOException {
List<InputStream> pdfs = new ArrayList<InputStream>();
Connection con = DataSourceUtil.getConnection();
ResultSet rs = null;
Statement statement = null;
InputStream binaryStream = null;
Blob blob = null;
StringBuffer sb = new StringBuffer("select t1.b_file from tbillorder_file t1 where t1.l_serialno in "+searialno+"");
try {
statement = con.createStatement();
// 先调用Empty_BLOB()函数插入一个空对象
rs = statement.executeQuery(sb.toString());
while (rs.next()) {
blob = rs.getBlob(1);
if(blob != null){
binaryStream = blob.getBinaryStream();
}
pdfs.add(binaryStream);
}
}catch(Exception e){
throw new DAOException(e.getMessage(), e);
}finally {
DbUtils.close(statement, rs);
DataSourceUtil.releaseConnection(con);
}
return pdfs;
}

posted @ 2017-12-25 15:09  一z都在  阅读(605)  评论(0编辑  收藏  举报