2018pdf 批量导出

 

由于现在各大浏览器厂商的限制目前大部分主流浏览器已经不支持 Java 插件了, 导致 applet 打印也无法在各大浏览器上继续使用. 谷歌将在 2020 年取消对 flash 插件的支持目前没受到影响的就是 pdf 的功能. 润乾只提供了自带的 pdf 打印功能, 今天我就分享一种批量导出 pdf 的方法

<%
//读取文件流作为导出的pdf
OutputStream os = null;
       os = new FileOutputStream("D:/zu.pdf");
	      PdfReport pdf=new PdfReport(os);
request.setCharacterEncoding( "UTF-8" );
//获取多个表信息的参数
  String report = request.getParameter( "report" );

  if( report == null || report.trim().length() == 0 ) throw new Exception( "请输入报表文件名及参数串report={无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}..." );


String report1=report.replace("}","");//去掉串中的}
String report2=report1.substring(1,report1.length());//去掉串中的最左侧的{
String[] a=report2.split("\\{");//此时串中多个报表之间用{分隔,所以此处按照该符号split生成数组
for(int i=0;i<a.length;i++){//按数组进行循环,也就是按报表循环

if(a[i].lastIndexOf("(")<=0)//判断分割后的子串中是否包含(,如包含,代表有参数,不包含,则没有参数
{
System.out.println("报表没有参数,报表名为="+a[i]);
String reportPath = request.getRealPath("WEB-INF\\reportFiles\\"+a[i]);
	
	ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);
	Context cxt = new Context();
	Engine engine = new Engine(rd, cxt);  //构造报表引擎
	
IReport iReport = engine.calc(); //运算报表
             
       PageBuilder pb = new PageBuilder(iReport,200,600);//导出之前设置分页属性没有设置这条导出不分页
	     pdf.export(pb);
}
else{
	System.out.println("报表有参数,报表名为="+a[i].split("\\(")[0]);//如果有参数,则按(字符split,左侧为报表名

String reportPath = request.getRealPath("WEB-INF\\reportFiles\\"+a[i].split("\\(")[0]);
	
	ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);
		 Context cxt = new Context(); 

	String[] cs=a[i].split("\\(")[1].replace(")","").split(";");//右侧为参数串,并且去掉参数串的),多个参数用;隔开,所以此处按照;split
	for(int j=0;j<cs.length;j++){//按参数循环
	System.out.println("第"+j+"组参数,参数名为"+cs[j].split("=")[0]+"参数值为"+cs[j].split("=")[1]);

	cxt.setParamValue(cs[j].split("=")[0],cs[j].split("=")[1]);
	}
	Engine engine = new Engine(rd, cxt);  //构造报表引擎
	
IReport iReport = engine.calc(); //运算报表

       PageBuilder pb = new PageBuilder(iReport,200,600);//导出之前设置分页属性没有设置这条导出不分页
	     pdf.export(pb);
	
	

}
}

		 
    pdf.save();
    os.flush();
	os.close();//最后记得关闭流


    
%>

批量导出示例下载