欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中关于PDF制作报表核心操作

程序员文章站 2022-03-15 18:13:44
...

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报表

相关标签: pdf生成