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

多表批量导出txt及打压缩包下载的更多相关文章

  1. asp.net用zip方法批量导出txt

    首先: 引用 ICSharpCode.SharpZipLib.dll,百度下载 然后引用命名空间: using ICSharpCode.SharpZipLib.Zip;using ICSharpCod ...

  2. 批量导出access某表内容到word文档

    一.需求: 需要将表中每一条记录中的某些内容导出在一个word文档中,并将这些文档保存在指定文件夹目录下 二.界面,简单设计如下: 三.添加office相关引用 添加后可在解决方案资源管理器中看到: ...

  3. 批量导出数据库表(oracle)

    批量导出数据库表(oracle) 要求:导出sql文件,包含表结构和数据. 方案一 1:用cmd进入命令行输入:tnsping cmstar就是测试172.18.13.200是否连接成功2:导入与导出 ...

  4. C# 导出word文档及批量导出word文档(1)

         这里用到了两个dll,一个是aspose.word.dll,另外一个是ICSharpCode.SharpZipLib.dll,ICSharpCode.SharpZipLib.dll是用于批量 ...

  5. C# 导出word文档及批量导出word文档(4)

          接下来是批量导出word文档和批量打印word文件,批量导出word文档和批量打印word文件的思路差不多,只是批量打印不用打包压缩文件,而是把所有文件合成一个word,然后通过js来调用 ...

  6. ajax+ashx:实现文件的批量导出

    背景: 最近公司有一个需求,就是实现excle的批量导出(一次性导出多个excle). 实现方式: 想到的实现方式: 1.发起一个导出请求,然后批量生产需要导出的excle文件,最后将文件生成一个压缩 ...

  7. Gitlab用户信息批量导出

    前言 因运维体系中涉及到用户权限管理及统计,需将Gitlab用户数据提取出来并录入到公司内部自建的权限统计平台. 本文将对Gitlab的用户信息数据批量导出进行操作说明! 思路 A)要对数据进行批量的 ...

  8. Oracle sqlldr导入导出txt数据文件详解

    一.sqlldr导入txt 1.预备 a).txt文件 这里要保存成无签名的UTF-8 b).oracle建表 2.编写控制文件input_test.ctl LOAD DATA CHARACTERSE ...

  9. 解决Oracle 11g在用EXP导出时,空表不能导出

    实践结论可行,看"2.解决办法" 一.问题原因:     11G中有个新特性,当表无数据时,不分配segment,以节省空间     1.insert一行,再rollback就产生 ...

随机推荐

  1. 【learning】 单调队列与单调栈用法详解

    1.单调栈 单调栈是指一个栈内部的元素具有严格单调性的一种数据结构,分为单调递增栈和单调递减栈. 其具有以下两个性质: 1,满足栈底到栈顶的元素具有严格单调性. 2,满足栈的先进后出特性,越靠近栈顶的 ...

  2. 【原创】SSRS (SQL Serve Reporting Service) 访问权限的问题

    问题:The permissions granted to user 'TOUCHPOINTMED\sshi' are insufficient for performing this operati ...

  3. C++的开源跨平台日志库glog学习研究(一)

    作为C++领域中为数不多的好用.高效的.跨平台的日志工具,Google的开源日志库glog也算是凤毛麟角了.glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操作. 恰巧趁着五一我也 ...

  4. VM下--Linux根分区磁盘扩容

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6825938.html 1.缘由 由于需要对虚拟机中的软件进行升级,执行yum update的时候,整个更新包在8 ...

  5. 【Java并发编程】:生产者—消费者模型

    生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据. 这里实现如下情况的生产--消费模型: 生产者不断交替地生产两组数据“姓 ...

  6. Postman—添加断言和检查点

    前言 postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 断言会在请求返回之后,运行,并根据断言的pass\fail情况体现在最终测试结果中. 一.断言步骤 ...

  7. python上安装requests

    首先需要配置好python的环境变量. 测试是否成功配置,进入命令行,输入python. 如下图为配置成功. 去第三方库的网站下载安装包,解压在python的安装目录 ,下载地址:https://py ...

  8. 【C#】override,Abstract,Virtual 介绍及区别--转载

    要扩展或修改继承的方法.属性.索引器或事件的抽象实现或虚实现,必须使用 override 修饰符. 1. override 方法提供从基类继承的成员的新实现.通过 override 声明重写的方法称为 ...

  9. 《css3揭秘》的效果code

    1.在阅读css3揭秘的基础上,跟着书中的效果组合起来的这组代码. 2.代码中有四张图片分别是 1.jpg 2.jpg  3.jpg 4.jpg; 作为demo,图片名称没有语义. 3.兼容性:  I ...

  10. 关于gcc编译器中函数不用进行原型声明的解释

    经过大量实验和参考网上的说法得出一个结论: gcc编译器中,函数可以不用提前进行原型声明,编译器会把函数调用同时认为是声明.需要注意的是,由于函数调用的时候并没有写明函数返回值,这是gcc把调用当成声 ...