三、报表格式定义
知道了JFreeReport组件的报表结构,下面该介绍如何定义了。有两种方法:一种是使用java代码实现,另一种是使用xml定义。
1、代码方式实现报表格式定义
使用代码方式实现步骤很简单,就是分别构造报头(ReportHeader)、报尾(ReportFooter)、页头(PageHeader)、页尾(PageFooter)、
分组头(GroupHeader)和分组尾(GroupFooter)对象,然后使用set方法加入JFreeReport对象就可以了。
上面这几个对象我们一般只会用到其addElement(Element element)方法,即将一个元素(Element)加入到指定部分。在这里,元素的意义
就是显示在报表中的内容,包括文本、表格、图形、图片等等。Element是一个抽象类,他有几个子类,但我们不必直接使用这些子类,
而是通过org.jfree.report.elementfactory包中的工厂类来构建。:
l LabelElementFactory——标签元素工厂类,定义报表中显示的固定文本内容。
l TextElementFactory——文本元素工厂类,根据定义的域名,显示其域名下的内容。比如:tableModel中的“编号”字段下的内容。
l StaticShapeElementFactory——图形元素类,可以绘制直线、矩形等图形。
其他的元素我没用过,大家可以查看JFreeReport的API文档。他们的用法请看下面的例子。
public static final int ROW_HEIGHT = 20; //报告:行高度
public static final int HEADER_HEIGHT = 40; //报告:报头高度
JFreeReport report = new JFreeReport(); //构造JFreeReport对象
report.setName("Report Name");
PageDefinition pd = report.getPageDefinition(); //取得报告页面定义
float pageWidth = pd.getWidth(); //取得打印材质的页宽
//定义页头
PageHeader header = new PageHeader();
LabelElementFactory title = new LabelElementFactory(); //标题元素
title.setText("统计报表"); //设置文本内容
title.setColor(Color.BLACK); //设置颜色
title.setAbsolutePosition(new Point2D.Float(0, HEADER_HEIGHT)); //设置显示位置
title.setMinimumSize(new FloatDimension(pageWidth, 36)); //设置尺寸
title.setHorizontalAlignment(ElementAlignment.LEFT);
title.setVerticalAlignment(ElementAlignment.MIDDLE);
title.setDynamicHeight(true); //设置是否动态调整高度(如果为true,当文本内容超出显示范围时高度自动加长)
header.addElement(title.createElement());
report.setPageHeader(header);
String[] columnNames = getColumnNames(); //取得报表数据域的所有列名
if (columnNames != null && columnNames.length > 0) ...{
report.getItemBand().addElement(StaticShapeElementFactory.createHorizontalLine(null, Color.BLACK, new BasicStroke(1), 0)); //绘制表格的横线
//定义报表头
ReportHeader reportHeader = new ReportHeader();
for (int i = 0; i < columnNames.length; i++) ...{
//字段名元素
LabelElementFactory col = new LabelElementFactory();
col.setName(columnNames[i]);
col.setColor(Color.BLACK);
col.setHorizontalAlignment(ElementAlignment.CENTER);
col.setVerticalAlignment(ElementAlignment.MIDDLE);
col.setDynamicHeight(true);
col.setAbsolutePosition(new Point2D.Float((pageWidth
/ (columnNames.length))
* i, 0));
col.setMinimumSize(new FloatDimension(pageWidth
/ (columnNames.length), ROW_HEIGHT)); //设置最小尺寸
col.setBold(true); //设置是否粗体显示
col.setText(columnNames[i]);
reportHeader.addElement(col.createElement());
JFreeReport报表设计(二)
![](https://img-home.csdnimg.cn/images/20240711042549.png)