zoukankan      html  css  js  c++  java
  • 多表批量导出txt及打压缩包下载

    

    在一些特殊的业务系统中,有些客户查看报表数据时不需要在浏览器上逐一查看,需要在页面端选择要查看的报表名称(可多选),选择条件,然后将所选中的报表批量导出到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文件,导出其他文件类似

  • 相关阅读:
    动手动脑
    编写一个程序,用户输入两个数,求出其加减乘除,并用消息框显示计算结果
    实验报告
    《大道至简第二章读后感》
    《大道至简》第一章读后感
    CentOS 6.x 播放 mp3 音乐 —— 成功
    CentOS下通过rdesktop连接Windows远程桌面
    Linux之文件系统的简单操作
    Linux之档案管理
    如何判断raid1中哪块硬盘损坏?
  • 原文地址:https://www.cnblogs.com/shiGuangShiYi/p/10117516.html
Copyright © 2011-2022 走看看