packagecom.zcr.service;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.ArrayList;importjava.util.List;importcom.lowagie.text.Document;importcom.lowagie.text.DocumentException;importcom.lowagie.text.Element;importcom.lowagie.text.Font;importcom.lowagie.text.PageSize;importcom.lowagie.text.Phrase;importcom.lowagie.text.pdf.BaseFont;importcom.lowagie.text.pdf.PdfPCell;importcom.lowagie.text.pdf.PdfPTable;importcom.lowagie.text.pdf.PdfWriter;importcom.zcr.until.GenerateFileName;importcom.zcr.until.GetFilePlace;importcom.zcr.until.User;/*** 生成pdf
*@authorzcr
**/
public classCreatePdf
{
Document document= new Document();//建立一个Document对象
private static Font headfont;//设置字体大小
private static Font keyfont;//设置字体大小
private static Font textfont;//设置字体大小
static{//中文格式
BaseFont bfChinese;try{//设置中文显示
bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
headfont= new Font(bfChinese, 10, Font.BOLD);//设置字体大小
keyfont = new Font(bfChinese, 8, Font.BOLD);//设置字体大小
textfont = new Font(bfChinese, 8, Font.NORMAL);//设置字体大小
}catch(Exception e)
{
e.printStackTrace();
}
}/*** 文成文件
*@paramfile 待生成的文件名*/
publicCreatePdf(File file)
{
document.setPageSize(PageSize.A4);//设置页面大小
try{
PdfWriter.getInstance(document,newFileOutputStream(file));
document.open();
}catch(Exception e)
{
e.printStackTrace();
}
}publicCreatePdf()
{
}public voidinitFile(File file)
{
document.setPageSize(PageSize.A4);//设置页面大小
try{
PdfWriter.getInstance(document,newFileOutputStream(file));
document.open();
}catch(Exception e)
{
e.printStackTrace();
}
}int maxWidth = 520;/*** 为表格添加一个内容
*@paramvalue 值
*@paramfont 字体
*@paramalign 对齐方式
*@return添加的文本框*/
public PdfPCell createCell(String value, Font font, intalign)
{
PdfPCell cell= newPdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(align);
cell.setPhrase(newPhrase(value, font));returncell;
}/*** 为表格添加一个内容
*@paramvalue 值
*@paramfont 字体
*@return添加的文本框*/
publicPdfPCell createCell(String value, Font font)
{
PdfPCell cell= newPdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setPhrase(newPhrase(value, font));returncell;
}/*** 为表格添加一个内容
*@paramvalue 值
*@paramfont 字体
*@paramalign 对齐方式
*@paramcolspan 占多少列
*@return添加的文本框*/
public PdfPCell createCell(String value, Font font, int align, intcolspan)
{
PdfPCell cell= newPdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(align);
cell.setColspan(colspan);
cell.setPhrase(newPhrase(value, font));returncell;
}/*** 为表格添加一个内容
*@paramvalue 值
*@paramfont 字体
*@paramalign 对齐方式
*@paramcolspan 占多少列
*@paramboderFlag 是否有有边框
*@return添加的文本框*/
public PdfPCell createCell(String value, Font font, int align, intcolspan,booleanboderFlag)
{
PdfPCell cell= newPdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(align);
cell.setColspan(colspan);
cell.setPhrase(newPhrase(value, font));
cell.setPadding(3.0f);if (!boderFlag)
{
cell.setBorder(0);
cell.setPaddingTop(15.0f);
cell.setPaddingBottom(8.0f);
}returncell;
}/*** 创建一个表格对象
*@paramcolNumber 表格的列数
*@return生成的表格对象*/
public PdfPTable createTable(intcolNumber)
{
PdfPTable table= newPdfPTable(colNumber);try{
table.setTotalWidth(maxWidth);
table.setLockedWidth(true);
table.setHorizontalAlignment(Element.ALIGN_CENTER);
table.getDefaultCell().setBorder(1);
}catch(Exception e)
{
e.printStackTrace();
}returntable;
}public PdfPTable createTable(float[] widths)
{
PdfPTable table= newPdfPTable(widths);try{
table.setTotalWidth(maxWidth);
table.setLockedWidth(true);
table.setHorizontalAlignment(Element.ALIGN_CENTER);
table.getDefaultCell().setBorder(1);
}catch(Exception e)
{
e.printStackTrace();
}returntable;
}publicPdfPTable createBlankTable()
{
PdfPTable table= new PdfPTable(1);
table.getDefaultCell().setBorder(0);
table.addCell(createCell("", keyfont));
table.setSpacingAfter(20.0f);
table.setSpacingBefore(20.0f);returntable;
}public void generatePDF(String [] head,List list,intcolNum)
{
Class classType= list.get(0).getClass();//创建一个只有5列的表格
PdfPTable table =createTable(colNum);//添加备注,靠左,不显示边框
table.addCell(createCell("APP信息列表:", keyfont, Element.ALIGN_LEFT, colNum,false));//设置表头
for(int i = 0 ; i < colNum ; i++)
{
table.addCell(createCell(head[i], keyfont, Element.ALIGN_CENTER));
}if(null != list && list.size() > 0)
{int size =list.size();for(int i = 0 ; i < size ; i++)
{
T t=list.get(i);for(int j = 0 ; j < colNum ; j ++)
{//获得首字母
String firstLetter = head[j].substring(0,1).toUpperCase();//获得get方法,getName,getAge等
String getMethodName = "get" + firstLetter + head[j].substring(1);
Method method;try{//通过反射获得相应的get方法,用于获得相应的属性值
method = classType.getMethod(getMethodName, newClass[]{});try{
System.out.print(getMethodName+":" + method.invoke(t, new Class[]{}) +",");//添加数据
table.addCell(createCell(method.invoke(t, newClass[]{}).toString(), textfont));
}catch(IllegalArgumentException e)
{
e.printStackTrace();
}catch(IllegalAccessException e)
{
e.printStackTrace();
}catch(InvocationTargetException e)
{
e.printStackTrace();
}
}catch(SecurityException e)
{
e.printStackTrace();
}catch(NoSuchMethodException e)
{
e.printStackTrace();
}
}
System.out.println("");
}
}try{//将表格添加到文档中
document.add(table);
}catch(DocumentException e)
{
e.printStackTrace();
}//关闭流
document.close();
}/*** 提供外界调用的接口,生成以head为表头,list为数据的pdf
*@paramhead //数据表头
*@paramlist //数据
*@return//excel所在的路径*/
public String generatePDFs(String [] head,Listlist)
{final String FilePath = "pdfPath";
String saveFilePathAndName= "";//获得存储的根目录
String savePath = newGetFilePlace().getFileDirFromProperties(FilePath);//获得当天存储的路径,不存在则生成当天的文件夹
String realSavePath = newGenerateFold().getFold(savePath);
saveFilePathAndName= new GenerateFileName().generateFileName(realSavePath,"pdf");
File file= newFile(saveFilePathAndName);try{
file.createNewFile();
}catch(IOException e1)
{//TODO Auto-generated catch block
e1.printStackTrace();
}
initFile(file);try{
file.createNewFile();//生成一个pdf文件
}catch(IOException e)
{//TODO Auto-generated catch block
e.printStackTrace();
}newCreatePdf(file).generatePDF(head,list,head.length);returnsaveFilePathAndName;
}}