struts2+ireport进行报表开发

2024-02-05 14:18

本文主要是介绍struts2+ireport进行报表开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先去官方网站将所需要的资源包下载下来。
http://jasperforge.org/

然后,通过JasperReports产生一个jrxml文件(可以生成静态的,也可以生成与数据库对应的),本例生成一个与数据库MyDatabase中表student对应的classic.jrxml文件。

  1. <?xml version="1.0" encoding="UTF-8"  ?>  
  2.  <!-- Created with iReport - A designer for JasperReports -->  
  3.  <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">  
  4.  <jasperReport  
  5.           name="classic"  
  6.           columnCount="1"  
  7.           printOrder="Vertical"  
  8.           orientation="Portrait"  
  9.           pageWidth="595"  
  10.           pageHeight="842"  
  11.           columnWidth="535"  
  12.           columnSpacing="0"  
  13.           leftMargin="30"  
  14.           rightMargin="30"  
  15.           topMargin="20"  
  16.           bottomMargin="20"  
  17.           whenNoDataType="NoPages"  
  18.           isTitleNewPage="false"  
  19.           isSummaryNewPage="false">  
  20.      <property name="ireport.scriptlethandling" value="0" />  
  21.      <property name="ireport.encoding" value="UTF-8" />  
  22.      <import value="java.util.*" />  
  23.      <import value="net.sf.jasperreports.engine.*" />  
  24.      <import value="net.sf.jasperreports.engine.data.*" />  
  25.      <queryString><![CDATA[select * from student]]></queryString>  
  26.      <field name="xuehao" class="java.lang.String"/>  
  27.      <field name="userName" class="java.lang.String"/>  
  28.      <field name="userPwd" class="java.lang.String"/>  
  29.      <field name="czxt" class="java.lang.Integer"/>  
  30.      <field name="wjyl" class="java.lang.Integer"/>  
  31.      <field name="sjjg" class="java.lang.Integer"/>  
  32.          <group  name="xuehao" >  
  33.              <groupExpression><![CDATA[$F{xuehao}]]></groupExpression>  
  34.              <groupHeader>  
  35.              <band height="25"  isSplitAllowed="true" >  
  36.                  <rectangle>  
  37.                      <reportElement  
  38.                          mode="Opaque"  
  39.                          x="0"  
  40.                          y="0"  
  41.                          width="535"  
  42.                          height="25"  
  43.                          forecolor="#8080FF"  
  44.                          backcolor="#000000"  
  45.                          key="rectangle"/>  
  46.                      <graphicElement stretchType="NoStretch">  
  47.                      <pen lineWidth="0.0" lineStyle="Solid"/>  
  48.  </graphicElement>  
  49.                  </rectangle>  
  50.                  <staticText>  
  51.                      <reportElement  
  52.                          x="3"  
  53.                          y="2"  
  54.                          width="96"  
  55.                          height="23"  
  56.                          forecolor="#FFFFFF"  
  57.                          backcolor="#FFFFFF"  
  58.                          key="staticText"/>  
  59.                      <box>                   <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>  
  60.                      <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>  
  61.                      <bottomPen lineWidth="0.0" lineColor="#000000"/>  
  62.                      <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>  
  63.  </box>  
  64.                      <textElement>  
  65.                          <font size="16"/>  
  66.                      </textElement>  
  67.                  <text><![CDATA[xuehao]]></text>  
  68.                  </staticText>  
  69.          .   
  70.          .   
  71.          .   
  72.          .   
  73.                  <line direction="TopDown">  
  74.                      <reportElement  
  75.                          x="0"  
  76.                          y="3"  
  77.                          width="535"  
  78.                          height="0"  
  79.                          key="line"/>  
  80.                      <graphicElement stretchType="NoStretch"/>  
  81.                  </line>  
  82.                  <textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="false" evaluati hyperlinkType="None"  hyperlinkTarget="Self" >  
  83.                      <reportElement  
  84.                          x="1"  
  85.                          y="6"  
  86.                          width="209"  
  87.                          height="19"  
  88.                          forecolor="#000000"  
  89.                          backcolor="#FFFFFF"  
  90.                          key="textField"/>  
  91.                      <box>                   <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>  
  92.                      <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>  
  93.                      <bottomPen lineWidth="0.0" lineColor="#000000"/>  
  94.                      <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/>  
  95.  </box>  
  96.                      <textElement>  
  97.                          <font size="10"/>  
  98.                      </textElement>  
  99.                  <textFieldExpression   class="java.util.Date"><![CDATA[new Date()]]></textFieldExpression>  
  100.                  </textField>  
  101.              </band>  
  102.          </pageFooter>  
  103.          <summary>  
  104.              <band height="0"  isSplitAllowed="true" >  
  105.              </band>  
  106.          </summary>  
  107.  </jasperReport>  




Java的环境配置好后,就可以MyCompile.java产生PDF、XML、EXCEL等格式。

  1. /**  
  2.   * @作者 Jcuckoo  
  3.   * @创建日期 2008-12-08  
  4.   * @版本 V 1.0  
  5.   */  
  6.  public class MyCompile {   
  7.      public static void main(String[] args) throws Exception {   
  8.          //导出jasper格式   
  9.          JasperCompileManager.compileReportToFile("classic.jrxml","classic.jasper");   
  10.          System.out.println("成功编译成JasperReport文件(classic.jasper)");   
  11.          //填充时,使用数据源数据连接,产生带有数据的jasper   
  12.          JasperFillManager.fillReportToFile("classic.jasper" , null ,dbPool.getConnection());   
  13.          System.out.println("成功填充了一个报表文件(*.jrprint)");   
  14.          //填充时,即使没有使用数据源,也必须指定一个新建的JREmptyDataSource实例,而不能直接使用null   
  15.          //JasperRunManager.runReportToPdfFile("classic.jasper" , "classic.pdf" , null , new JREmptyDataSource());   
  16.          JasperRunManager.runReportToPdfFile("classic.jasper" , "classic.pdf" , null , dbPool.getConnection());   
  17.          System.out.println("成功编译成JasperReport文件Jasper2Pdf");   
  18.          //导出XML格式   
  19.          JasperExportManager.exportReportToXmlFile("classic.jrprint" , "classic.xml" , true);   
  20.          System.out.println("成功创建了一个XML文档");   
  21.          //到处excel格式   
  22.          JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject("classic.jrprint");   
  23.          JRXlsExporter exporter = new JRXlsExporter();   
  24.          //设置要导出的jasperPrint   
  25.          exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);   
  26.          exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "classic.xls");   
  27.          exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);   
  28.          exporter.exportReport();   
  29.          System.out.println("成功创建了一个excel文档");   
  30.          JRViewer jr = new JRViewer("classic.jrprint" , false);   
  31.          jr.setPreferredSize(new Dimension(900730));    
  32.          JFrame jf = new JFrame("报表预览");   
  33.          jf.add(jr);   
  34.          jf.pack();   
  35.          jf.setVisible(true);   
  36.      }   
  37.  }  

 



将Strut2的环境配置好后,就可以通过web的方式进行访问了。
index.jsp

  1. <body>   
  2.   <a href="htmlexport.action">html格式报表</a>   
  3.   <hr>   
  4.   <a href="pdfexport.action">pdf格式报表</a>   
  5.   <hr>   
  6.   <a href="xmlexport.action">XML格式报表</a>   
  7.    <hr>   
  8.   <a href="excelexport.action">excel格式报表</a>   
  9. </body>  



struts.xml

  1. <package name="jCuckoo" extends="jasperreports-default">//此处要注意。   
  2.     <action name="htmlexport" class="jCuckoo.JasperAction">  
  3.         <result name="success" type="jasper">  
  4.             <param name="location">jasper/classic.jasper</param>  
  5.             <param name="format">HTML</param>  
  6.             <param name="dataSource">studentList</param>  
  7.         </result>  
  8.     </action>  
  9.     <action name="pdfexport" class="jCuckoo.JasperAction">  
  10.         <result name="success" type="jasper">  
  11.             <param name="location">jasper/classic.jasper</param>  
  12.             <param name="format">PDF</param>  
  13.             <param name="dataSource">studentList</param>  
  14.         </result>  
  15.     </action>  
  16.     <action name="xmlexport" class="jCuckoo.JasperAction">  
  17.         <result name="success" type="jasper">  
  18.             <param name="location">jasper/classic.jasper</param>  
  19.             <param name="format">XML</param>  
  20.             <param name="dataSource">studentList</param>  
  21.         </result>  
  22.     </action>  
  23.     <action name="excelexport" class="jCuckoo.JasperAction">  
  24.         <result name="success" type="jasper">  
  25.             <param name="location">jasper/classic.jasper</param>  
  26.             <param name="format">XLS</param>  
  27.             <param name="dataSource">studentList</param>  
  28.         </result>  
  29.     </action>  
  30. </package>  



struts2-jasperreports-plugin-2.0.8.jar中的struts2-jasperreports-plugin-2.0.8.jar需要修改成:
该处要注意

  1. <package name="jasperreports-default" extends="struts-default">  
  2.          <result-types>  
  3.              <result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/>  
  4.          </result-types>  
  5.      </package>  


JasperAction.java

  1. public class JasperAction extends ActionSupport   
  2.  {   
  3.      public List getStudentList()   
  4.      {   
  5.          StudentDAO studao=new StudentDAO();   
  6.          return studao.getAllStudent();   
  7.      }   
  8.      public String execute() throws Exception {   
  9.              return SUCCESS;   
  10.      }   
  11.  }  



StudentDAO.java

  1. public class StudentDAO {   
  2.      public StudentDAO() {   
  3.      }   
  4.      Connection conn;   
  5.      Statement st;   
  6.      ResultSet rs;   
  7.      public List getAllStudent(){   
  8.          String sql="select * from student ";   
  9.          List students=new ArrayList();   
  10.          try {   
  11.              conn=dbPool.getConnection();   
  12.              st=conn.createStatement();   
  13.              rs=st.executeQuery(sql);   
  14.              while(rs.next()){   
  15.                  Student student=new Student(rs.getString("xuehao"),   
  16.                          rs.getString("userName"),   
  17.                          rs.getString("userPwd"),   
  18.                          rs.getInt("czxt"),   
  19.                          rs.getInt("wjyl"),   
  20.                          rs.getInt("sjjg")   
  21.                  );   
  22.                  students.add(student);   
  23.              }   
  24.          } catch (SQLException e) {   
  25.              try {   
  26.                  conn.close();   
  27.              } catch (SQLException e1) {   
  28.                  e1.printStackTrace();   
  29.              }   
  30.              e.printStackTrace();   
  31.              return null;   
  32.          }   
  33.          return students;   
  34.      }   
  35.  }  



dbPool.java

  1. /**  
  2.   * @作者 Jcuckoo  
  3.   * @创建日期 2008-12-06  
  4.   * @版本 V 1.0  
  5.   */  
  6.  public class dbPool{   
  7.      private static dbPool instance = null;   
  8.      //取得连接   
  9.      public static ResultSet getAllStudent(){   
  10.          String sql="select * from student ";   
  11.          Connection conn=null;   
  12.          Statement st;   
  13.          ResultSet rs=null;   
  14.          try {   
  15.              conn=dbPool.getConnection();   
  16.              st=conn.createStatement();   
  17.              rs=st.executeQuery(sql);   
  18.              return rs;   
  19.          } catch (SQLException e) {   
  20.              try {   
  21.                  conn.close();   
  22.              } catch (SQLException e1) {   
  23.                  e1.printStackTrace();   
  24.              }   
  25.              e.printStackTrace();   
  26.              return null;   
  27.          }   
  28.      }   
  29.      public static synchronized Connection getConnection() {   
  30.          if (instance == null){   
  31.              instance = new dbPool();   
  32.          }   
  33.          return instance._getConnection();   
  34.      }   
  35.      private dbPool(){   
  36.          super();   
  37.      }   
  38.      private  Connection _getConnection(){   
  39.          try{   
  40.              String sDBDriver  = "com.microsoft.jdbc.sqlserver.SQLServerDriver";   
  41.              String sConnection   = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase";   
  42.              String sUser = "sa";   
  43.              String sPassword = null;   
  44.              Class.forName(sDBDriver).newInstance();   
  45.              return DriverManager.getConnection(sConnection,sUser,sPassword);   
  46.          }   
  47.          catch(Exception se){   
  48.              System.out.println(se);   
  49.              return null;   
  50.          }   
  51.      }   
  52.      //释放资源   
  53.      public static void dbClose(Connection conn,PreparedStatement ps,ResultSet rs)   
  54.      throws SQLException   
  55.      {   
  56.            rs.close();   
  57.            ps.close();   
  58.            conn.close();   
  59.        }   
  60.      }  

这篇关于struts2+ireport进行报表开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/681176

相关文章

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3