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

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

Java使用com.lowagie.text.pdf插件编写的PDF报表工具类,支持动态报表创建,使用简单,附件包含了测试类和生成报表文件。附件的代码需要修改相关的保存路径后可以直接使用。创建一张报表例子: private JsFileExportResult createRowReport() { String condition = "开始时间:2018-02-02 14:00:30 结束时间:2018-02-06 16:00:30"; PDFGridReport pdfReport = new PDFGridReport("报表创建测试", GridReportTestModel.getModels()); pdfReport.addCondition(condition); pdfReport.header("字段名称1", "item1", 0, 0).width(160); pdfReport.header("字段名称3", "item3", 0, 2).getCell().backgroundColor(Color.ORANGE); pdfReport.header("字段名称4", "item4", 0, 3); pdfReport.header("字段名称5", "item5", 0, 4); pdfReport.header("字段名称2", "item2", 0, 1); pdfReport.header("值", "value", 0, 5).alignH(HAlign.ALIGN_CENTER).getCell().alignH(HAlign.ALIGN_RIGHT); pdfReport.header("时间", "time", 0, 6); pdfReport.header("图片", "image", 0, 7).width(60).alignH(HAlign.ALIGN_CENTER).getCell() .alignH(HAlign.ALIGN_CENTER).alignV(VAlign.ALIGN_MIDDLE); // 横向打印 pdfReport.getPageSetting().setPrintHorizontal(); pdfReport.group("item1").childGroup("item2"); pdfReport.setCellFormat(new PDFCellValueFormat() { @Override public String format(String fieldName, String oriValue) { if ("value".equals(fieldName)) { return String.format("%.2f", Double.parseDouble(oriValue)).toString(); } else { return oriValue; } } }); JsFileExportResult fileResult = pdfReport.createReport(); return fileResult; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值