首先,创建IReport表格文件,双击打开“Jaspersoft iReport Designer 5.6.0 ”,设计器界面如下图所示:
接着,在左上角找到“文件”,点击它下面的“New...”子项,打开新建窗口,如下图所示:
由于是新建报表,需要选择Report,一般情况下,选择的模板是Blank A4,单击“Launch Report Wizard”,进入下一步
如下图所示:
这时,进入填写报表的名称和选择生成文件路径,选填完毕后单击“下一步”,
如下图所示:
然后,填写查询。如果没有默认的数据库选择,需要单击“New”,选择数据库驱动、路径,填写数据库账号和密码,
如下图所示:
由于用的是MySQL数据库,数据库连接用的是JDBC连接,填写查询名称,JDBC驱动,JDBC路径,数据库用户名和密码
如下图所示:
由于连接数据库,需要查询数据库,编写SQL语句,
如下图所示:
进入下一步后,将需要的字段添加到右边框中
如下图所示:
接着,编写完SQL语句后,需要分组的话,选择某一字段,
如下图所示:
上述设置完毕后,进入完成状态,单击“完成”,
如下图所示:
1)用ireport创建完成jrxml文件后,到ireport的安装目录找到相应的jasper文件,然后放到项目的一个目录中。(由于让程序每次都编译jrxml很浪费时间,再说模板也不容易改变,建议只编译一次就OK)2)使用代码如下
Session session = HibernateUtil.currentSession()
Connection con = session.connection()//得到链接
Statement stmt = con.createStatement()
ResultSet rs = stmt.executeQ ry("select * from applications_list where app_id='" +appId+"'")//用数据集传入带参数的SQL语句
System.out.println("select * from applications_list where appl_list_id='" +appId+"'")
String appPath = req st.getSession().getServletContext().getRealPath("/")//得到以便于好的jasper文件
if (appPath.lastIndexOf("\\") != appPath.length() - 1)appPath += "\\"
String reportFileName = appPath+ "jasper\\untitled_report_1.jasper"
Map parameters = new HashMap()
parameters.put("Title", "设备申请列表")//注意可以有很多个参数
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFileName, parameters, new JRResultSetDataSource(rs))
JRRtfExporter exporter = null
exporter = new JRRtfExporter()
response.setContentType("text/htmlcharset=UTF-8")
response.setContentType("application/msword")
String applicatiosname = ToUTF8.toUtf8String("设备申请单")//处理下载后文件名中文问题
response.setHeader("Content-disposition","attachmentfilename="+applicatiosname+".doc")
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8")
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint)
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream())
exporter.exportReport()
?
?
?
* 返回字符编码UTF-8 */
?p lic static String toUtf8String(String s) {
StringB?r sb = new StringB?r()
for (int i = 0i <s.length()i++) {
char c = s.charAt(i)
if (c >= 0 &&c <= 255) {
sb.append(c)
} else {
byte[] b
try {
b = Character.toString(c).getBytes("UTF-8")
} catch (Exception ex) {
//System.out.println(ex)
b = new byte[0]
}
for (int j = 0j <b.lengthj++) {
int k = b[j]
if (k <0)
k += 256
sb.append("%" + Integer.toHexString(k).toUpperCase())
}
}
}
return sb.toString()
?}
不懂楼主为什么要用这个也太麻烦了吧,上面是我去论坛里面搜的,真心无力啊啊,我用的finereport,功能很强大齐全啊,也不用还搞代码。网上有免费版,楼主可以百度看看,希望可以帮到你。
这个问题,也困扰我很久,今天解决了,主要是有个属性设置下,即在主表调用子表时,需要为子报表添加参数,选择“从主报表复制”,然后依次类推,孙报表,或者说子报表再嵌套的子报表,参数传递也使用此方法即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)