1.首先获取文件模板存在的位置和临时文件存在的位置
2.创建流操作
3.进行读取和写出的操作 关闭流
注意事项:a.windows环境和linux环境有差异;b.如有流没有正常关闭复制生成的文件会出现破损无法打开现象
//处理不同操作系统环境下对路径、路径+文件的获取(可抽成方法)
public String enviorment(String template,String tableName){
String index = "";
//windows
if("\\".equals(File.separator)){
return index = template.substring(6)+tableName;
}
//linux
if("/".equals(File.separator)){
return index = template.substring(5)+tableName;
}
return index ;
}
public File enviorment1(String template){
File index = "";
//windows
if("\\".equals(File.separator)){
return index = template.substring(6)+tableName;
}
//linux
if("/".equals(File.separator)){
return index = template.substring(5)+tableName;
}
return index ;
}
//PDF核心方法
public String pdf(HttpServletRequest request,String temptName,List<Object> list){
//模板
String template1 = request.getSession.getServletContext().getResource("/文件名/")+"";
//临时文件存储
String template2 = request.getSession.getServletContext().getResource("/文件名/")+"";
//删除上次生成的旧文件 防止生成过多对系统造成负担
File [] file = enviorment1(String template);
File [] ls = file.listFiles();
if(ls != null){
if(ls.length > 0){
for(File file1 : ls){
file1.delete();
}
}
}
String fileNamepdf = null;//临时表名
String pdfPath = "";
//获取模板
String fileName = enviorment(template1,tempName);
//创建pdf读入流,
PdfReader reader = new PdfReader(fileName);
ByteArrayOutputStream bos = new ByteArrayOutputStream ();
//根据pdf读入流创建pdfstamper,用来生成新的pdf
PdfStamper ps = new PdfStamper(reader,bos);
AcroFields s = ps.getAcroFields();
s.setField("pdf中的表格中定义的值","查询出的值");
ps.setFormFlattening(true);
ps.close();
pdfPath = enviorment(template2 ,fileNamepdf+".pdf" );
FileOutputStream fos = new FileOutputStream(pdfPath );
fos.write(bos.toByteArray());
fos.close();
bos.close();
reader.close();
return pdfPath;
}
//程序入口
String aa = pdf(request,temptName, list)
以上操作已经完成生成pdf报表