`
bh三少
  • 浏览: 102057 次
  • 性别: Icon_minigender_1
  • 来自: 北海
社区版块
存档分类
最新评论

struts2+jasperReport生成各种形式的报表

阅读更多
/**
 * 導出html形式報表
 * @param request  請求對象
 * @param response 響應對象
 * @param parameters   設置報表的參數
 * @param jrxmlFilePath    報表的jrxml文件路徑
 * @param jasperFilePath   報表的jasper文件路徑
 * @param resultList   數據列表(List),用於構造數據源
 */
@SuppressWarnings("unchecked")
public static void exportHtmlReport(HttpServletRequest request, HttpServletResponse response, Map parameters, String jrxmlFilePath, String jasperFilePath, List resultList) {
	    JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(resultList);
	    try {
	        
	        JasperPrint jasperPrint = new JasperPrintWithJavaBean(parameters, jrxmlFilePath, jasperFilePath, dataSource).getJasperPrint();
	        JRHtmlExporter exporter = new JRHtmlExporter();
	        request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
	        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
	        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
	        exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/servlets/image?image=");
//	        exporter.setParameter(JRExporterParameter.PAGE_INDEX, pageIndex);
	        exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,false);
	        //設置瀏覽器的圖片不緩存
	        exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
	        exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
	        //設置html顯示字體過小的問題
	        exporter.setParameter(JRHtmlExporterParameter.SIZE_UNIT, "pt");
	        exporter.exportReport();
	    } catch(Exception e) {
	        e.printStackTrace();
	    } finally {
	        try {
                if(response.getOutputStream() != null)
                    response.getOutputStream().close();
            } catch (IOException e) {
                e.printStackTrace();
            }
	    }
	}

 这个方法是直接在页面上显示报表,所以struts2的配置如下:

<action name="exportFareConditionBudgetByFare" class="com.boc.web.action.financialfare.statistics.BudgetMonitoringConditionAction" method="exportFareConditionBudgetByFare"> 
            <result name="success" type="jasper"> 
            <param name="location">/jrxml/budget/fare_con_budget_fare.jasper</param> 
            <param name="dataSource">budgetList</param> 
            <param name="format">HTML</param> 
            <!--  <param name="imageServletUrl"> 
                    <![CDATA[/image?image=]]> 
                </param>--> 
            </result> 
            </action>

 

/** 
 * 生成pdf形式報表文件 
 * @param parameters   設置報表的參數 
 * @param jrxmlFilePath    報表的jrxml文件路徑 
  * @param jasperFilePath   報表的jasper文件路徑 
 * @param resultList   數據列表(List),用於構造數據源 
 * @return 返回生成的pdf文件的絕對路徑 
 */ 
@SuppressWarnings("unchecked") 
public static String exportPdfReport(Map parameters, String jrxmlFilePath, String jasperFilePath, List resultList) { 
    JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(resultList); 
    try { 
        JasperPrint jasperPrint = new JasperPrintWithJavaBean(parameters, jrxmlFilePath, jasperFilePath, dataSource).getJasperPrint(); 
        JasperExportManager.exportReportToPdfFile(jasperPrint, getFileName(jrxmlFilePath, ".jrxml")+".pdf"); 
        return getFileName(jrxmlFilePath, ".jrxml")+".pdf"; 
    } catch(Exception e) { 
        e.printStackTrace(); 
        return null; 
    } 
} 

 这个方法是直接生成pdf文件并提示用户下载,用的是ajax的提交方式,所以struts2的配置如下:

<action name="generateReportFile" class="com.boc.web.action.financialfare.statistics.BudgetMonitoringConditionAction" method="generateReportFile"> 
            <result name="success" type="json"> 
            </result> 
            </action>

 
  

/** 
 * 生成excel形式報表文件 
 * @param parameters   設置報表的參數 
 * @param jrxmlFilePath   報表的jrxml文件路徑 
 * @param jasperFilePath   報表的jasper文件路徑 
 * @param resultList   數據列表(List),用於構造數據源 
 * @return 返回生成的excel文件的絕對路徑 
 */ 
@SuppressWarnings("unchecked") 
public static String exportXlsReport(Map parameters, String jrxmlFilePath, String jasperFilePath, List resultList) { 
    JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(resultList); 
    try { 
        JasperPrint jasperPrint = new JasperPrintWithJavaBean(parameters, jrxmlFilePath, jasperFilePath, dataSource).getJasperPrint(); 
//         JRXlsExporter xlsExporter = new JRXlsExporter(); 
        JRAbstractExporter exporter = new JExcelApiExporter(); 
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, getFileName(jrxmlFilePath, ".jrxml")+".xls"); 
        //刪除最後一條記錄的空行 
        exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); 
        exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS, Boolean.TRUE); 
        exporter.setParameter(JRXlsExporterParameter.IGNORE_PAGE_MARGINS, Boolean.TRUE); 
        exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); 
        //删除多余的ColumnHeader 
        exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); 
        //顯示邊框 
        exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 
        exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8"); 
        exporter.exportReport(); 
        return getFileName(jrxmlFilePath, ".jrxml")+".xls"; 
    } catch(Exception e) { 
        e.printStackTrace(); 
        return null; 
    } 
} 

 这个方法是直接生成excel文件并提示用户下载,用的是ajax的提交方式,所以struts2的配置如下:

<action name="generateReportFile" class="com.boc.web.action.financialfare.statistics.BudgetMonitoringConditionAction" method="generateReportFile"> 
            <result name="success" type="json"> 
            </result> 
            </action>

     注意:JExcelApiExporter这个类需要用到jxl的包,用poi的不可以。 

   

/** 
* 打印報表 
*/ 
public static void print(HttpServletRequest request, HttpServletResponse response,Map parameters, String jrxmlFilePath, String jasperFilePath, List resultList){ 
   String filePath=exportPdfReport(parameters,jrxmlFilePath,jasperFilePath,resultList); 
   File returnFile=new File(filePath); 
   response.setHeader("Content-disposition", "filename="+getFileName(jrxmlFilePath, ".jrxml")+".pdf"); 
   response.setHeader("Content-Type", "application/pdf"); 
   BufferedInputStream bis = null;//读excel   
   BufferedOutputStream bos = null;//输出   
   try{   
       //读取excel文件   
       bis = new BufferedInputStream(new FileInputStream(returnFile));   
       //写入response的输出流中   
       bos=new java.io.BufferedOutputStream(response.getOutputStream()); 
       byte[] buff = new byte[2048];/*设置缓存*/ 
       int bytesRead;   
       while(-1!= (bytesRead = bis.read(buff, 0, buff.length))){   
           bos.write(buff, 0, bytesRead);   
       }   
   }catch(Exception e){   
       e.printStackTrace();   
   }finally{   
       if (bis != null)   
           try {   
               bis.close();   
         } catch (IOException e) {   
             e.printStackTrace();   
         } 
     if (bos != null)   
       try {   
         bos.close();   
       } catch (IOException e) {   
         e.printStackTrace();   
       } 
  } 
} 

 这个方法是打印报表的,直接把生成的pdf文件以流的形式输出到页面,然后利用adobe的pdf工具来打印。需要客户端安装adobe的pdf工具,你也可以利用其他的方式来打印,如IE内置的一个插件,在此不详细描述。

 

0
0
分享到:
评论

相关推荐

    struts2+jasperReport+ireport做报表总结

    Struts2、JasperReport 和 iReport 是开发Web报表应用中的常用技术栈。本文主要针对使用Struts2框架结合JasperReport5.0与iReport5.0进行报表开发时可能遇到的问题进行总结。 1. **报表预览问题**: - 数据源为空...

    struts2+Ireport+Jasperreport实现报表导出

    总结来说,这个项目通过Struts2作为控制器处理用户请求,iReport用于设计报表模板,JasperReport负责生成报表,而Highcharts Export Server则提供了额外的图表导出能力。这种组合提供了一套完整的报表系统,可以满足...

    整合Struts2.1+jasperreport

    Action可能需要一个方法来填充数据源,并调用JasperPrint对象来生成报表。 4. 数据源处理:根据应用需求,可以使用JDBC、Java集合或者其他方式来提供报表数据。在Action中,使用JasperFillManager.fillReport()方法...

    Struts2+JasperReport报表应用

    开发者可以利用JasperReport的强大设计工具和Struts2的控制流程来轻松地生成动态、交互式的报表,满足各种业务需求。虽然这个示例仅使用JavaBean作为数据源,但在实际项目中,可以根据需要扩展到更复杂的数据连接和...

    整合Struts2+JasperReport Web报表应用示例

    Struts2是一个强大的MVC(模型-视图-控制器)框架,用于构建结构清晰、可维护性高的Web应用程序,而JasperReport则是一个功能丰富的报告生成库,能够创建复杂的报表并支持多种输出格式,如HTML、PDF等。 在"整合...

    Struts2 + JasperReport应用一:导PDF,Excel,HTML显示

    总结起来,这篇博文会介绍如何在Struts2中集成JasperReport,通过编写Action类和配置Struts2的XML文件,实现动态报表的生成,并导出为PDF、Excel和HTML格式。这样的功能对于需要展示大量数据的应用场景非常有用,如...

    struts2+ireport+jasperreport报表设计简单示例

    使用ireport和struts2进行报表设计的简单示例,生成普通报表和饼图、柱状图。java工程的lib里包含丰富的jar包,且很多都是从各个网站下载的最新版本,文件夹内还包含一些ireport和jasperreport文档,适合刚入门学习...

    struts2整合jasperreport

    2. JasperReport 3.7.1:报表引擎,负责生成报表。 3. Struts2.1.8:Web应用框架。 4. poi-3.5.jar:如果需要生成Excel格式的报表,需要此Apache POI库。 在整合Struts2和JasperReport3的过程中,我们主要关注以下...

    Struts2与Jasperreport报表结合

    在与JasperReport结合时,通常会创建一个Struts2 Action,这个Action负责接收前端请求,调用业务服务获取报表数据,然后将数据传递给JasperReport生成报表。 接下来是Spring2.5的使用。Spring作为一个全面的企业级...

    jasperReport+struts2+jatoolsPrinter打印

    总的来说,这个项目组合使用了jasperReport生成报表,Struts2处理Web请求,以及jatoolsPrinter进行打印,展示了Java企业级应用中一个完整的报表生成和打印流程。开发者需要熟悉这些库的使用,以及如何在Struts2框架...

    Struts2_JasperReport整合的例子

    Struts2提供了流处理能力,可以方便地将生成的报表以二进制流的形式发送到浏览器。 6. **前端展示**:在页面上,使用Struts2的标签库或者其他方式(如JavaScript、jQuery)来触发报表下载动作,或者在页面上直接...

    SSH+JASPERREPORT整合例

    这种方式下,JasperReports通过JDBC连接到数据库,获取数据并生成报表。步骤大致包括: 1. 创建JasperReport设计文件(.jrxml),定义报表布局和查询语句。 2. 编译.jrxml文件为.jasper二进制文件,这个过程会解析...

    Struts2与jasperReport简单示例

    4. **整合Struts2**:创建一个Struts2 Action,这个Action负责生成报表。在Action中调用上述步骤生成报表实例,然后将其设置为Action的一个属性,以便传递到视图。 5. **配置结果类型**:在struts.xml中,为这个...

    SSH项目整合案例+jasperreport

    此案例适合初学者了解SSH框架的集成,以及如何利用jasperreport生成报表。通过学习,开发者可以掌握如何在实际项目中处理数据导入、报表设计和生成等任务。同时,对于熟悉SQL-SERVER数据库的用户,此案例也提供了与...

    struts2 + jasper report

    通常,我们会在Struts2的Action中处理业务逻辑,获取需要的数据,然后调用JasperReport API来生成报表。Action可以通过`JRDataSource`接口将数据传递给JasperReport,也可以预先将数据写入到CSV或XML文件,作为...

    Struts2集成jasperreport3.7.1所需的Jar包

    在Struts2中,FreeMarker常用来生成动态视图,也可以用于生成报表模板。 7. **struts2-core-2.1.8.1.jar**:这是Struts2的主框架库,包含了Action、Interceptor、Result等核心组件,负责处理HTTP请求和响应。 8. *...

Global site tag (gtag.js) - Google Analytics