多表批量导出txt及打压缩包下载

来源:互联网 发布:辽宁科技大学软件学院 编辑:程序博客网 时间:2024/04/29 22:31


在一些特殊的业务系统中,有些客户查看报表数据时不需要在浏览器上逐一查看,需要在页面端选择要查看的报表名称(可多选),选择条件,然后将所选中的报表批量导出到txt文件中并且要把批量导出的结果文件打成压缩包下载,这样就能在其他时间统一查看报表数据。

解决方案:润乾提供了丰富的开发接口,可通过API实现该需求。

String raqNames="1,2";//批量导出报表名称,此处可从其他页面获得

             String burs="BDP";//定义参数,可从其他页面获得

                    String root = getServletContext().getRealPath("/"); //获得应用根目录

       String fileName = "srbbfx";//定义批量导出压缩包名称

              String txtPath = root+"txtPath\\"+Double.toString(Math.random()*100000000).toString().substring(0,6)+"\\";

              java.io.File file = new java.io.File(txtPath);

              if(!file.exists()) {

                file.mkdirs();

              } else {

              }

//报表导出后涉及到打压缩包下载,此处为每次导出新建临时文件夹

Context context = new Context();//构建报表环境

       context.setParamValue("date1","20101101");//设置起始时间

       context.setParamValue("date2","20101231");//设置结束时间,实际应用由程序获得或循环取值

       context.setMacroValue("macro1"," and bur_sta_tel='"+bur[j]+"'");//给润乾宏赋值,每次取相应站数据

       Engine enging = new Engine( rd, context);//构建润乾引擎

       IReport iReport = enging.calc();//计算报表,生成结果文件

              java.io.FileOutputStream fos=new FileOutputStream(txtPath+"b"+raqN[i]+bur[j]+"20101101"+".txt");

       //txt文件名称格式报表文件名:b+表名+单位代码+.txt

       ReportUtils.exportToText(fos,iReport,",",true);//导出txt文件

//将导出的txt文件放到待压缩的zip包中

       String filePath=txtPath+"b"+raqN[i]+bur[j]+"20101101"+".txt";

          File f = new File(filePath);

            if(f.exists())

            {

                FileInputStream fis1 = new FileInputStream(f);

                ZipEntry ze = new ZipEntry(f.getName());

                zos.putNextEntry(ze);

                int b;

                while((b = fis1.read()) != -1)

                    zos.write(b);

                fis1.close();

            }

   fos.flush();

 fos.close();

                          }

                           }

                            zos.flush();

        zos.close();

//将生成的压缩包下载到客户端,此处可自写代码实现,可自增代码将生成的文件删除

               response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName+".zip"+ "\"");

       try

{

java.io.OutputStream os = response.getOutputStream();

java.io.FileInputStream fiss = new java.io.FileInputStream(txtPath+fileName+".zip");

byte[] b = new byte[10240];

int i = 0;

while ( (i = fiss.read(b)) > 0 )

{

os.write(b, 0, i);

 

}

fiss.close();

os.flush();

os.close();

}

catch ( Exception e )

{}

       out.clear(); 

out = pageContext.pushBody(); 

这样报表就能实现批量导出txt并打压缩包下载。

具体代码见附件。打压缩包用到了其他类,将附件中的jar包放到WEB-INF/lib下,这里为导出txt文件,导出其他文件类似

0 0
原创粉丝点击