集算报表应用开发之直接导出Excel/PDF文件

报表应用中有时报表只需生成指定文件,而无需在页面展现,生成的文件常见于Excel、PDF等。由于报表不展现,也就无需使用报表提供的tag,可以直接通过程序导出。集算报表提供了丰富的API,允许开发人员编写代码实现自己的业务逻辑。这里通过在servlet中导出Excel为例来看一下报表不展现而直接导出的实现方式。

定义导出Excel的servlet(ExportToExcel),主要代码如下:

   1、接收参数

String report =request.getParameter("rpx");

String year = request.getParameter("year");

  2、读入报表

String reportFile   =request.getSession().getServletContext().getRealPath("/reportFiles/"+report);

  3、读入并计算报表

Context cxt = new Context();

ReportDefine rd =(ReportDefine)ReportUtils.read(reportFile);

cxt.setParamValue("year", year);

Engine engine = new Engine(rd, cxt);

IReport iReport = engine.calc();

  4、导出Excel

ReportUtils.exportToExcel("D:/result.xls",iReport, true);

根据页面超链接访问上述servlet,并传递参数,如:

http://192.168.1.102:8080/rpx_demo/servlet/ExportToExcel?rpx=order.rpx&year=1996即可直接生成Excel文件,而无需展现报表。

导出的Excel效果如下:

集算报表提供了多个导出Excel的方法,除了可以导出xls格式,也可以导出xlsx格式文件,开发人员可以根据需求选择导出Excel的方法:

ReportUtils.exportToExcel(java.io.OutputStream os, IReport report,boolean pageBroken);

ReportUtils.exportToExcel(java.io.OutputStream os, IReport report,boolean pageBroken, int dispRatio);

ReportUtils.exportToExcel(java.lang.String fileName, IReport report,boolean pageBroken);

ReportUtils.exportToExcel(java.lang.String fileName, IReport report,boolean pageBroken, int dispRatio);

ReportUtils.exportToExcel 2007(java.lang.String fileName,IReportreport,boolean pageBroken)

ReportUtils.exportToExcel 2007(java.io.OutputStream os,IReportreport,boolean pageBroken)

导出PDF与导出Excel类似,调用相应导出PDF的方法即可,集算报表提供导出PDF的方法包括:

ReportUtils.exportToPDF(java.io.OutputStream os, IReport report);

ReportUtils.exportToPDF(java.io.OutputStream os, IReport report,boolean pageBroken, boolean graphicOut)

ReportUtils.exportToPDF(java.lang.String fileName, IReport report);

ReportUtils.exportToPDF(java.lang.String fileName, IReport report,boolean pageBroken, boolean graphicOut)

【附】导出Excel完整代码

package com.runqian.servlet;
 
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.raqsoft.report.model.ReportDefine;
import com.raqsoft.report.usermodel.Context;
import com.raqsoft.report.usermodel.Engine;
import com.raqsoft.report.usermodel.IReport;
import com.raqsoft.report.usermodel.ParamMetaData;
import com.raqsoft.report.util.ReportUtils;
 
publicclassExportToExcel extends HttpServlet {
 
    /**
     * Constructor of the object.
     */
    public ExportToExcel() {
       super();
    }
 
    /**
     * Destruction of the servlet. <br>
     */
    publicvoid destroy() {
       super.destroy(); // Just puts "destroy" string in log
       // Put your code here
    }
 
    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has itstag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException,IOException {
 
       Stringreport = request.getParameter("rpx");
       Stringyear = request.getParameter("year");
       
       //保证报表名称的完整性
       int iTmp = 0;
       if( (iTmp =report.lastIndexOf(".rpx")) <= 0 ){
           report= report + ".rpx";
           iTmp= 0;
       }
       StringreportFile = request.getSession().getServletContext().getRealPath("/reportFiles/"+report);
       Contextcxt = newContext(); 
       try {
           ReportDefinerd = (ReportDefine)ReportUtils.read(reportFile);
           cxt.setParamValue("year", year); 
           Engineengine = newEngine(rd, cxt);   //构造报表引擎
           IReportiReport = engine.calc();   //运算报表
           ReportUtils.exportToExcel("D:\\result.xls",iReport, true);
       }catch(Throwable e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
       
    }
 
    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has itstag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)
           throws ServletException,IOException {
 
       response.setContentType("text/html");
       PrintWriterout = response.getWriter();
       out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML4.01 Transitional//EN\">");
       out.println("<HTML>");
       out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
       out.println(" <BODY>");
       out.print("    This is");
       out.print(this.getClass());
       out.println(", using the POST method");
       out.println(" </BODY>");
       out.println("</HTML>");
       out.flush();
       out.close();
    }
 
    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    publicvoid init() throws ServletException {
       // Put your code here
    }
 
}
时间: 2024-11-07 05:19:35

集算报表应用开发之直接导出Excel/PDF文件的相关文章

润乾集算报表应用开发之参数输入

参数对于报表的重要性不言自明,润乾集算报表支持两种参数输入方案,可以使用集算报表设计参数模板联合报表一同发布,还可以自定义参数输入后与报表结合.二者并没有显著的差异,前者在开发使用上更加方便快捷,而后者则在灵活性上更胜一筹,用户在使用集算报表参数输入时可以根据实际需要进行选择. 下面就上述两种参数输入方式的使用分别来看一下. 使用参数输入模板 集算报表提供了"参数模板"的报表类型,使用参数模板可以制作参数输入表单,而且其内置了多种编辑风格,如下拉树.下拉日历.列表框.下拉数据集等.使用

润乾集算报表应用开发之页面嵌入

润乾集算报表作为纯JAVA报表可以很方便嵌入到J2EE页面中使用,目前集算报表提供了多种发布方式供用用户将报表嵌入到JSP页面时使用.集算报表中报表有参数报表和数据报表两种,下面来看一下这两类报表的页面嵌入方式. 参数报表 由于参数报表大多数都和数据报表联合发布查询数据,所以这里只介绍联合使用方式(单独发布与数据报表一样).参数报表嵌入页面时使用的标签为<report:param>,该标签的主要属性有name.paramFileName和params,name指定了参数表单的名称,paramF

润乾集算报表提升性能之预先计算

报表应用中当数据量较大或计算过程较复杂时,会导致报表数据源准备过慢,从而影响报表性能.这时常常需要事先将报表需要的数据计算好,在呈现时直接引用即可,这样用户在访问报表时就可以迅速地获得响应. 当前的手段及弊端 由于报表在访问时还需要参数,显然不可能把所有参数组合对应的报表数据源都准备好,所以预先计算并不是最终的报表结果,在呈现的时刻仍然要再次进行一些简单的计算(如过滤.分组汇总.排序等),然而也不太可能指望报表呈现时刻由报表工具再完成所有这些运算(报表工具只能完成一部分小数据量的运算),这样就要

润乾集算报表多样性数据源之Hadoop

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表支持的数据源类型除传统的关系型数据库外,还支持:TXT文本.Excel.JSON.HTTP.Hadoop.mongodb等. 对于Hadoop,集算报表既可以直接访问Hive,也可以读取HDFS中的数据,完成数据计算和报表开发.Hive的访问和普通数据库一样使用JDBC就可以,这里不再赘述了.下面通过一个例子来看直接访问HDFS的过程. 报表说明 股票交易记录按月以文本形式存储在HD

集算报表通过API修改单元格属性

有时需要在程序中动态修改已做好报表的单元格属性,包括边框.字号.颜色.对齐方式等.润乾集算报表提供了丰富的API,开发人员可以通过提供的接口快速修改报表单元格属性. 修改单元格属性主要修改报表定义ReportDefine,比如下面已经做好的订单信息表如下: 预览效果: 我们通过代码修改该报表单元格属性: //设定边框        for (int i = 2; i <=3; i++) {            for (int j = 1; j <=6; j++) {            

润乾集算报表多样性数据源之混合多源

多样性数据源在报表开发中越来越常见,润乾集算报表对多样性数据源的有效支持使得这类报表开发变得非常简单,目前集算报表支持的数据源类型除传统的关系型数据库外,还支持:TXT文本.Excel.JSON.HTTP.Hadoop.mongodb等. 在集算报表中除了单独使用以上数据源,还可以混合使用.支持混合多数据源是集算报表多样性数据源的又一表现.下面通过一个实例说明使用过程. 报表说明 员工每月应发工资跟员工的基本工资.考勤以及绩效有关,考勤信息来源于人力部门从考勤系统中导出的文本文件,基本工资和绩效

润乾集算报表使用远程HTTP数据源的示例

报表的数据来源多种多样,有时会接收来自HTTP服务器的数据进行报表展现,一般报表工具只能通过报表自定义数据源使用高级语言(如JAVA)进行处理,实现较为复杂.集算报表简单地通用集算器接收HTTP数据源完成报表展现.这里通过一个实例说明. 学生成绩信息存储在远程的JSON格式文件中,其所在HTTP服务器对外提供统一HTTP访问接口,现需要读取学生成绩信息开发报表,汇总学生成绩并按总成绩排名.报表样式如下: JSON文件中包含班级.编号.姓名.学科.成绩等信息,格式如下: [ { "class&qu

用润乾集算报表实现实时报表(T+0)的方案

在报表项目中,客户越来越关注源数据的实时性,希望看到最新发生的数据在报表中体现出来.但是,传统的报表工具+数据仓库+ETL方式很难做到这一点,往往是只能看到昨天.上周甚至是上个月的情况,也就是T+1.T+7.T+30统称T+n报表.很难实现T+0报表,也就是能体现实时信息的报表. 分析其原因在于:1.如果报表的历史数据和最新数据都从客户的生产系统读取,虽然可以实现T+0报表,但是会对生产数据库造成压力,影响客户的业务.2.如果采用数据仓库的方式,那么ETL从生产库中取出数据,需要较长的"窗口时间

润乾报表教程-集算报表优化计算过程

报表作为数据统计分析软件,当它出现性能问题需要对数据源计算进行优化时,执行路径难以控制是阻碍报表优化的难题之一.这是由于数据库执行路径不透明,程序员很难甚至无法干预执行路径,也就难以提高数据库的性能.而一般报表工具不具备强计算能力,大部分计算仍然要依靠数据库进行,这就导致很多报表优化效果不理想. 不同于一般报表工具,润乾集算报表内置了专门用于数据计算的集算引擎,开发人员可以通过编写集算脚本完成报表数据源准备.与数据库执行SQL路径不可控相比,集算脚本的执行过程是可控的,开发人员可根据实际情况编写