使用jasperreports ,出现两个问题:
1。iReport 里面那个title band总共就几个字,为什么占用了整整一页?就算是没有,他仍然会有一个空页在前面。
2、$F,$P{},V{}的字段如何在java里面给它们赋值?我只知道$F{fieldName}只要在一个bean里有fieldName这样的属性,就可以了,把这样的bean List设置给dataSource就行了。<param name="dataSource">list</param>List list=new ArrayList();
while(rs.next){
Field obj=new Field();
obj.setFieldName(rs.getString(1);
........
list.add(obj);
}但是$P{a},V{b}这两个呢?
1。iReport 里面那个title band总共就几个字,为什么占用了整整一页?就算是没有,他仍然会有一个空页在前面。
2、$F,$P{},V{}的字段如何在java里面给它们赋值?我只知道$F{fieldName}只要在一个bean里有fieldName这样的属性,就可以了,把这样的bean List设置给dataSource就行了。<param name="dataSource">list</param>List list=new ArrayList();
while(rs.next){
Field obj=new Field();
obj.setFieldName(rs.getString(1);
........
list.add(obj);
}但是$P{a},V{b}这两个呢?
第二点:
$P{},就是从java程序给它传的参数,放在map里面,用JasperFillManager.fillReport时的第二个参数就是它
$V{},就相当于在模板里定义的变量,它可以进行运算,但是不能用java赋值$F{},当然就是报表中的数据了,JasperFillManager.fillReport的第三个参数,用JRBeanCollectionDataSource包一下
1 就看这个的吧,我用的老版本,不记得有这个参数,我是手工设置title的高度的。
2 $F 是数据源的字段
$P{} 是参数,可以通过发送一个Map过去进行赋值
V{}是内部的变量,只能通过内部的$F,$P进行计算拿到,不能通过外部设置(那是$P的工作)
需要设置特定字体.
例如:
<font fontName="黑体" pdfFontName="STSong-Light" size="12" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="true" pdfEncoding ="UniGB-UCS2-H" isStrikeThrough="false" />
注意:UniGB-UCS2-H,STSong-Light,黑体..要选择这些支持中文的字符集.title占了单独一页,确实是3楼的解决方法..
在实际的jxml中.
就是isTitleNewPage="false" isSummaryNewPage="false",意思是,标题title,末页summary说明,是否单独放在一页.
实际上,相当于封面和封尾.$F代表的是重复迭代的数据字段..一般的,放入水晶报表的.都是集合..本质上是实现JRAbstractBeanDataSource中的几个指定方法.
使水晶报表可以迭代这些数据字段.
假设你的数据,全部查询出来.放入了一个集合List<Object>,
Collection reportRows = list;
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(reportRows);
之后就可以注入JasperPrint使用$P是非迭代,你需要应用的固定常量.这个不是在数据集合里面的.是一个Map parameters,这个常量参数,是生成JasperPrint时候,注入的.