当前位置:首页 > 代码 > 正文

jasperreports代码(jasperreport子报表)

admin 发布:2022-12-19 23:23 146


本篇文章给大家谈谈jasperreports代码,以及jasperreport子报表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Jasperreports求助~ 如何控制打印份数

JasperPrint这个类,查过API是不支持直接设置打印份数的。

因为默认每一次是打印一份的。

所以你可以这样控制一下就行了。

我简单写了一下方法。

你自己根据项目需要处理一下异常就可以了

//i就是你要打印的数量,txt随便写了一下

public String getJasperPrint(int i){

if(i==0){

return "打印数量必须大于1";

}

if(i=1){

for(int j=0;ji;j++){

JasperPrint jasperPrint = new JasperPrintWithDataSource(reportFilePath, params, dataSource).getJasperPrint();

JasperPrintManager.printReport(jasperPrint, true);

}

}

return "打印成功";

}

jasperreport怎么集成到springmvc

项目原因需要在springmvc的基础上整合jasperreports生成报表。其实springmvc已经提供了对jasperreports的支持,感觉springmvc采用的一个比较好的方式是将报表的生成作为一个view处理,但是需要对每一种报表配置他的jasperreports模板及视图的映射,这样的话添加报表必须变更配置,比较麻烦,所以自己想了一个方法来避免这种配置,代码可以很容易和spring整合起来。

japserreports生成报表基本流程其实就是根据一个模板和数据源生成一个中间类型,然后可以在此基础上可以导出几种格式。我的想法是提供方法供springmvc的controller调用产生中间文件,然后在view里面向客户端导出请求的格式。

首先是ReportPrint类,很简单,只是包含一个JasperPrint对象(既上述的中间文件),代码很简单,不解释

01 public class ReportPrint {

02 JasperPrint jasperPrint = null;

03

04 public JasperPrint getJasperPrint() {

05 return jasperPrint;

06 }

07

08 public void setJasperPrint(JasperPrint jasperPrint) {

09 this.jasperPrint = jasperPrint;

10 }

11

12 }

接下来就是ReportCreater类,该类可通过spring注入到其他类中,调用它的createReport方法

01 public class ReportCreater {

02 private static final Log logger = LogFactory.getLog(ReportCreater.class);

03 private String jasperReportPath = null;//报表的模板文件存放路径(相对classpath,通过spring注入)

04 /**

05 * jasperDesignMap作为一个缓存来存储编译后的JasperReport模板

06 */

07 private MapString, JasperReport jasperDesignMap = newConcurrentHashMapString, JasperReport();

08

09 public void resetJasperDesignCache() {

10 jasperDesignMap.clear();

11 }

12

13 /**

14 * controller调用该方法来产生ReportPrint对象

15 */

16 public ReportPrint createReport(final String reportKey, final ResultSet rs, MapString, ? reportParams) throws ReportException {

17 try {

18 return _createReport(reportKey, rs, reportParams);

19 } catch (JRException e) {

20 logger.error(null, e);

21 throw new ReportException("产生报表出错" + reportKey);

22 }

23 }

24

25 private ReportPrint _createReport(final String reportKey, final ResultSet rs, MapString, ? reportParams) throws ReportException, JRException {

26 JasperReport jasperReport = getJasperReport(reportKey);

27 ReportPrint reportPrint = new ReportPrint();

28 JRResultSetDataSource resultSetDataSource = newJRResultSetDataSource(rs);

29 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, reportParams, resultSetDataSource);

30 reportPrint.setJasperPrint(jasperPrint);

31

32 return reportPrint;

33 }

34

35 private JasperReport getJasperReport(final String reportKey) {

36 try {

37 return _getJasperReport(reportKey);

38 } catch (IOException e) {

39 logger.error(null, e);

40 throw new ReportException("关闭文件流异常:" + reportKey);

41 } catch (JRException e) {

42 logger.error(null, e);

43 throw new ReportException("产生报表异常:" + reportKey);

44 }

45 }

46

47 private JasperReport _getJasperReport(final String reportKey) throwsIOException, JRException {

48 JasperReport jasperReport = null;

49 if (jasperDesignMap.containsKey(reportKey)) {

50 jasperReport = jasperDesignMap.get(reportKey);

51 } else {

52 jasperReport = getJasperReportFromFile(final String reportKey);

53 jasperDesignMap.put(reportKey, jasperReport);

54 }

55

56 return jasperReport;

57 }

58

59 /**

60 * 从模板文件编译获得模板对象

61 */

62 private JasperReport getJasperReportFromFile(final String reportKey) throws IOException, JRException {

63 String filePath = jasperReportPath + reportKey + ".jrxml";//图省事只支持jrxml的

64 InputStream jasperFileIS = null;

65 JasperReport jasperReport = null;

66

67 try {

68 jasperFileIS =this.getClass().getClassLoader().getResourceAsStream(filePath);

69 if (jasperFileIS == null) {

70 throw new ReportException("报表文件不存在:" + filePath);

71 }

72

73 JasperDesign jasperDesign = JRXmlLoader.load(jasperFileIS);

74 jasperReport = JasperCompileManager.compileReport(jasperDesign);

75 } finally {

76 if (jasperFileIS != null) {

77 jasperFileIS.close();

78 }

79 }

80

81 return jasperReport;

82 }

83

84 public String getJasperReportPath() {

85 return jasperReportPath;

86 }

87

88 public void setJasperReportPath(String jasperReportPath) {

89 this.jasperReportPath = jasperReportPath;

90 }

91

92 public static void main(String[] argv) {

93

94 }

95

96 }

以上就可以产生中间文件了,接下来就是按照spring的view规范写一个导出各种格式的视图就可以了

01 public class ReportView extends AbstractView {

02 private static final Log logger = LogFactory.getLog(ReportView.class);

03 private static final String XLS = "xls";

04 private static final String PDF = "pdf";

05 private static final String CSV = "csv";

06 private static final String REPORT_NAME = "reportName";

07 private static final String FORMAT = "format";

08 private static final String REPORT_PRINT = "reportPrint";

09 private static final String HTML = "html";

10

11 private static MapString, IReportFileExporter EXPORTER_MAP =

12 new HashMapString, IReportFileExporter(4);

13

14 static {

15 EXPORTER_MAP.put(XLS, new ReportXlsExporter());

16 EXPORTER_MAP.put(PDF, new ReportPdfExporter());

17 EXPORTER_MAP.put(CSV, new ReportCsvExporter());

18 EXPORTER_MAP.put(HTML, new ReportHtmlExporter());

19 }

20

21 @Override

22 protected void renderMergedOutputModel(Map model, HttpServletRequest request,

23 HttpServletResponse response) {

24 String reportName = (String) model.get(REPORT_NAME);//报表的文件名

25 String format = (String) model.get(FORMAT);//报表的格式pdf xls .....

26 ReportPrint reportPrint = (ReportPrint) model.get(REPORT_PRINT);//这就是之前生成的中间文件

27 response.setContentType("application/x-msdown;charset=utf-8");

28 try {

29 /* http头里的文件名貌似不支持utf-8,gbk之类的编码,需要转换一下

30 * 另外发现如果用new String(reportName.getBytes("UTF-8"), "iso-8859-1")的话Chrome和FF的

31 * 下载对话框的文件名是正常的,IE却是乱码,只能用GBK才正常

32 */

33 response.setHeader("Content-Disposition","attachment;filename=\"" +

34 new String(reportName.getBytes("GBK"),"iso-8859-1") + "\"");

35 } catch (UnsupportedEncodingException e) {

36 logger.error(null, e);

37 }

38 exportFile(reportPrint, format, response);

39 }

40

41 private void exportFile(ReportPrint reportPrint, String format, HttpServletResponse response) {

42 try {

43 _exportFile(reportPrint, format, response);

44 } catch (JRException e) {

45 logger.error("导出报表异常", e);

46 } catch (IOException e) {

47 logger.error(null, e);

48 }

49 }

50

51 private void _exportFile(ReportPrint reportPrint, String format, HttpServletResponse response) throws IOException, JRException {

52 OutputStream buffOS = null;

53

54 try {

55 buffOS = newBufferedOutputStream(response.getOutputStream());

56 IReportFileExporter exporter = null;

57

58 if (EXPORTER_MAP.containsKey(format)) {

59 exporter = EXPORTER_MAP.get(format);//获取需要格式的导出类

60 exporter.export(reportPrint, buffOS);

61 } else {

62 logger.error("错误的报表格式:" + format);

63 }

64 } finally {

65 if (buffOS != null) {

66 buffOS.close();

67 }

68 }

69 }

70

71 }

导出器是一个简单的接口,各种格式只要实现export方法就可以了

1 public interface IReportFileExporter {

2 public void export(ReportPrint reportPrint, OutputStream os) throwsJRException;

3 }

给一个导出PDF格式的例子,很简单

01 public class ReportPdfExporter implements IReportFileExporter {

02

03 public void export(ReportPrint reportPrint, OutputStream os) throwsJRException {

04 JRPdfExporter exporter = new JRPdfExporter();

05 exporter.setParameter(JRExporterParameter.JASPER_PRINT, reportPrint.getJasperPrint());

06 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, os);

07 exporter.exportReport();

08 }

09

10 }

jasperreport applet打印预览在jboss上显示不全(本地用jetty没有问题),可能是什么原因呢?如何解决

产生原因:在生成HTML页面时JRHtmlExporterParameter.IMAGES_URI参数设置不正确,主要是图片的路径问题。由JasperReport生成Html时,那些红叉叉是一个名称为px像素的图片,是内置在jasperreports包中的,在IE显示时以图片的形式显示解决办法:根据JasperReport的源代码显示,我们只需要以下两个步骤就能解决了 1、在web.xml中添加如下配置:servlet servlet-nameImageServlet/servlet-name servlet-classnet.sf.jasperreports.j2ee.servlets.ImageServlet/servlet-class /servlet servlet-mapping servlet-nameImageServlet/servlet-name url-pattern/servlets/image/url-pattern /servlet-mapping 2、在调用程序中增加如下代码:exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image="); 好了,经过上面两个步骤。重启服务,刷新页面立马就正常了完整代码:/** * 导出html */ private static void exportHtml(JasperPrint jasperPrint,String defaultFilename, HttpServletRequest request, HttpServletResponse response) throws IOException, JRException { response.setContentType("text/html;charset=UTF-8"); JRHtmlExporter exporter = new JRHtmlExporter(); PrintWriter out = response.getWriter(); try { request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out); exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE); exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8"); exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.FALSE); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image="); exporter.exportReport(); } catch (JRException e) { logger.debug(" 生成html文件失败 .... ...."); } } 上面的代码就能很完美的生成html了,页面没有红叉叉,chat图也能正常显示了

怎样实现JasperReport循环打印 or 多表打印

jasperreport的话不是很清楚,一般情况下都是需要代码的,我现在常用的报表软件是finereport,比较简单,可以实现批量打印。如需要打印出某个模板所有参数情况对应的结果,如下图,选择希望打印的参数,点击doprint按钮批量打印出对应的结果。

首先通过JS获取复选框的值然后拼凑出正确的URL,最后调用打印方法如PDF打印,通过post传参或get传参进行批量打印。

ireport5.1.0和jasperreports5.1.1怎么集成

Parameters通常是用来在打印的时候从程序里传值到报表里。也就是说parameters通常的是起参数传递的作用。他们可以被用在一些特定的场合(比如应用中SQL 查询的条件),如report中任何一个需要从外部传入的变量等(如一个Image对象所包括的char或报表title的字符串)。

和使用Fields一样,parameters也需要在创建的时候定义它的数据类型。parameters的数据类型是标准的java的Object。

2

在ireport中,Parameters的机制是允许用户通过应用程序传递参数致报表当中。在jasperreort中的某个对象中的expression可以通过下面的语法来访问一个当前ireport中存在的parameter:

$P{parameter name}。

如果应用程序没有为报表中定义的parameter赋值,那么parameter将会取我们在定义它的时候设置的default value的值。parameters是一个Java Object,所以如果它的类型是Object类型,我们在其default value里写下面的表达式就是错误的:

0.123

你必须要创建一个Object,如:

New Double(0.123)

这种写法就是正确的。

3

在查询中使用Parameters

Parameters可以用来做SQL查询的条件参数的传递。如果你想根据部门编号(dept_id)得到客户的详细信息 (设计的时候我们是不知道这个部门编号的具体值是多少的).此时我们可以这样组织查询语句:

select * from employee where dept_id=$P{deptId}

此时SQL查询引擎将会采用PreparedStatement来处理传入的deptId值以此作为查询条件参数。

如果你想直接通过parameter 值来作为SQL语句的一部分,那么你可以使用下面的特殊语法:$P!{parameter name}。这种写法允许你在查询时用parameter的值来替换parameter name。例如,如果我们有一个参数名为MyWhere其值为:where dept_id=D11 ,查询写法如下:

Select * from employee $P!{MyWhere}

查询时实际提交的字符串是:

Select * from employee where dept_id=D11

4

在程序里使用Parameters

在应用程序里,如果想把某个值传递到我们的报表中parameters时,我们可以把相关的值放入一个扩展java.util.Map接口类里,然后传入到ireport里。如下面的代码:

5

fillReport是一个关键的方法,它允许你通过一个文件名,一个参数集来传递到我们要调用的报表当中。例-如通过下面的处理方法我们可以让一个处部的传入值作为我们报表的title。

下面的是一个例子:

a).声明一个parameter.这个parameter是java.lang.String 类型,名字为:name_report:

b).将这个parameter拖到page中的title band.修改上面的程序代码如下:

运行时效果如下:

一般情况下,我们不需要为报表中的每一个parameters传递一个值,除非某一个parameter一定要从外部程序传入时我们才需为一个parameter设置一个值。如果一个parameter外部门程序没有为其赋值那么ireport将使用Default Value Expression来对一个parameter进行初始化,如果连Default Value Expression没有设置那么它的值就是null。

事实上,对于一个parameters我们不仅仅可以传递一个String,Integer,Boolean等java中小的对象,同时我们还可以利用parameters来传递一些足够大足够复杂的对象,比如一个图像(java.awt.Image),或者通过一个parameters来为一个为子报表提供的datasource 连接等。在用Map类型传递参数时我们要注意传递的参数要与report里的parameters类型保持一致,否则会抛出ClassCastException。

ireport内嵌的Parameters:

ireport提供了一些内建的parameters,这些parameters对于用户来说是只读的。内嵌的parameters列表如下:

同为比较常用的java报表生成工具,FineReport对参数的解读和使用方法与ireport有所不同,具体实现思路和步骤如下,供ireport使用者借鉴:

在大多数情况下,我们并不需要报表把数据库中所有的数据都呈现出来,而是要根据一些条件来过滤出我们想要的数据,这就是参数查询。

FineReport报表中就是使用参数来动态的过滤数据的,实现用户和数据的实时交互,如下图:

注:鼠标移至参数界面的中间区域会出现收缩按钮,折叠或展开参数查询界面。

如何实现参数查询

几乎所有的统计报表都会有类似上图的统计条件,传统的做法是使用如ext、html等编程实现,工作量大且维护成本高。

Finereport报表只需要通过参数的定义,添加参数控件绑定数据、参数过滤和参数面板样式三个步骤便可以轻松实现参数查询,零代码,维护简单。

实现步骤

FR报表提供了参数界面的概念,让用户快速制作出参数表单界面,制作参数查询界面的步骤如下:

参数定义:设置参数名称,添加参数,根据实际情况的不同添加不同种类的参数,详细请查看参数的种类与区别。

添加控件绑定数据:FineReport参数查询,是在参数面板中添加控件,使控件名字与参数名称一样,通过该控件将其控件值传递给参数,实现动态修改参数值得效果,可为控件绑定数据,直接选择;

参数面板样式设定:设置参数界面中控件的位置,参数面板的位置,背景等等。

参数应用实例之URL给参数传递中文值

虽然我们建议模板名称、参数变量名称都用英文,但是对于中国式的复杂报表,参数肯定有中文情况。

使用ie浏览器通过url给参数赋值为中文时,会发现中文值会出现乱码,如下图所示

问题原因

因为浏览器编码与服务器编码不一致,导致中文url输入会产生乱码,无法被正常识别。

解决方案

通过url给参数赋值一般应用在报表已经集成到项目中,希望点击某个链接将某个值传递给报表;而在浏览器中直接给参数赋值呢,一般是做测试使用的,此时可以将浏览器换成火狐或者谷歌。

集成到项目中,可以使用FR.cjkEncode()方法,如点击某个链接给col赋值为地区,此时可以使用如下方法:

1. window.location=";col="+FR.cjkEncode("中文名称")

jasperreports-server中的示例报表是怎么制作的

下面的代码(JasperReportExport.java)演示了JasperReport文档的导出过程。该JasperExportManager提供的方法将报表导出成PDF,HTML和XML。导出到使用的类net.sf.jasperreports.engine.export.JRXlsExporter的XLS格式。此代码生成以下三个文件:

· sample_report.pdf

· sample_report.htmll

· sample_report.xls

导出为其他格式

让我们来写一个报表模板。在JRXML文件的内容 (C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml) 如下:

queryString

![CDATA[]]

/queryString

fieldname="country"class="java.lang.String"

fieldDescription![CDATA[country]]/fieldDescription

/field

fieldname="name"class="java.lang.String"

fieldDescription![CDATA[name]]/fieldDescription

/field

columnHeader

bandheight="23"

staticText

reportElementmode="Opaque"x="0"y="3"width="535"

height="15"backcolor="#70A9A9"/

box

bottomPenlineWidth="1.0"lineColor="#CCCCCC"/

/box

textElement/

text![CDATA[]] /text

/staticText

staticText

reportElementx="414"y="3"width="121"height="15"/

textElementtextAlignment="Center"

verticalAlignment="Middle"

fontisBold="true"/

/textElement

text![CDATA[Country]]/text

/staticText

staticText

reportElementx="0"y="3"width="136"height="15"/

textElementtextAlignment="Center"

verticalAlignment="Middle"

fontisBold="true"/

/textElement

text![CDATA[Name]]/text

/staticText

/band

/columnHeader

detail

bandheight="16"

staticText

reportElementmode="Opaque"x="0"y="0"width="535"

height="14"backcolor="#E5ECF9"/

box

bottomPenlineWidth="0.25"lineColor="#CCCCCC"/

/box

textElement/

text![CDATA[]] /text

/staticText

textField

reportElementx="414"y="0"width="121"height="15"/

textElementtextAlignment="Center"

verticalAlignment="Middle"

fontsize="9"/

/textElement

textFieldExpressionclass="java.lang.String"

![CDATA[$F{country}]]

/textFieldExpression

/textField

textField

reportElementx="0"y="0"width="136"height="15"/

textElementtextAlignment="Center"

verticalAlignment="Middle"/

textFieldExpressionclass="java.lang.String"

![CDATA[$F{name}]]

/textFieldExpression

/textField

/band

/detail

/jasperReport

问件C:\tools\jasperreports-5.0.1\test\src\com\yiibai\DataBeanList.java 的内容如下:

package com.yiibai;

import java.util.ArrayList;

publicclassDataBeanList{

publicArrayListDataBean getDataBeanList(){

ArrayListDataBean dataBeanList =newArrayListDataBean();

dataBeanList.add(produce("Manisha","India"));

dataBeanList.add(produce("Dennis Ritchie","USA"));

dataBeanList.add(produce("V.Anand","India"));

dataBeanList.add(produce("Shrinath","California"));

return dataBeanList;

}

关于jasperreports代码和jasperreport子报表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/29998.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载