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();//最后记得关闭流
%>