动态报表API接口

动态报表API接口用于实现动态生成、修改报表定义对象,利用该对象可以生成报表、导出报表、保存对应对象到报表支撑库;也可以通过报表定义ID将已有的报表定义文件读取为对象并对该对象进行修改。

动态报表API接口多用于报表定义不确定情况下,其中包括报表行、列不固定,报表类型不固定、报表数据源不固定等场景,如即时报表。在多数情况下使用动态报表API接口创建报表是不需要报表定义文件(*.rdx)。

2

主要接口如下:

  • com.neusoft.report.common.design.DesignReportManager

  • com.neusoft.report.common.design.define.DesignCell

  • com.neusoft.report.common.design.define.DesignCells

  • com.neusoft.report.common.design.define.DesignColumn

  • com.neusoft.report.common.design.define.DesignDiagonalCell

  • com.neusoft.report.common.design.define.DesignGraphCell

  • com.neusoft.report.common.design.define.DesignPageHeaderFooter

  • com.neusoft.report.common.design.define.DesignPageSetup

  • com.neusoft.report.common.design.define.DesignPictureCell

  • com.neusoft.report.common.design.define.DesignReport

  • com.neusoft.report.common.design.define.DesignRow

  • com.neusoft.report.common.design.define.DesignTextCell

1 使用步骤

通过调用动态报表API生成报表定义对象具体步骤如下:

  1. 调用DesignReportManager类的createDesignReport方法,该方法用于创建一个报表对象DesignReport;

  2. 调用DesignReportManager类的调用createDesignText方法,该方法用于创建一个报表文本单元格对象DesignTextCell;

  3. 调用1中生成的DesignReport对象的addRow方法创建报表中的一个行对象DesignRow;

  4. 调用 3中生成的DesignRow对象的setCell方法,可以将2中生成的DesignTextCell对象设置进入到行对象中;

  5. 通过类似3、4中的方法,可以设置报表定义对象中的其它类型单元格;

2 DesignReportManager接口

2.1 简介

DesignReportManager是动态API实现的入口,通过该入口可以获取创建动态报表需要的所有对象。

2.2 方法说明

  • public static DesignReportManager getInstance()

    得到DesignReportManager类的实例对象;

  • public DesignReport createDesignReport()

    创建一个DesignReport接口对象;

  • public DesignReport createDesignReport(int row, int column)

    创建一个DesignReport接口对象,执行报表的初始行数、列数;

  • public DesignTextCell createDesignText()

    创建一个文本类型单元格;

  • public DesignPictureCell createDesignPicture()

    创建一个图片类型单元格;

  • public DesignGraphCell createDesignGraph(int type)

    创建一个图表单元格;

  • public DesignDiagonalCell createDesignDiagonal()

    创建一个包含斜线表头的单元格;

  • public DesignReport loadDesignReport(String id)

    通过报表ID创建一个DesignReport接口对象。

  • public int saveDesignReport(DesignReport report, String parentId)

    将DesignReport接口对象保存到支撑库目录ID为parentId的目录下;

  • public Report generateReport(DesignReport report, Map context)

    通过DesignReport对象生成一个Report报表实例。

3 DesignReport接口

3.1 简介

DesignReport是报表定义接口,通过该接口可以操作一个报表定义。

3.2 方法说明

  • public void setName(String name)

    设置报表名称;

    name:报表名称;

    返回值:报表名称;

  • public String getName()

    读取报表名称;

    返回值:报表名称;

  • public void setDescription(String desc)

    设置报表描述;

    desc:报表描述;

  • public String getDescription()

    读取报表描述;

    返回值:报表描述;

  • public void setAuthor(String author)

    设置作者;

    author:作者名;

  • public String getAuthor()

    读取作者;

    返回值:作者名;

  • public void setCategory(String category);

    设置报表分类;

    category:报表分类;

  • public String getCategory()

    读取报表分类;

    返回值:报表分类;

  • public String getTemplateID()

    获得该模板的ID;

    返回值:模板ID;

  • public DesignPageSetup getPageSetup()

    获得页面设置对象,以进行页面设置;

    返回值:页面设置对象;

  • public void addSQLSource(String dsName, String datasource, String statement)

    添加关系数据库SQL来源数据集;

    dsName:数据集名称;

    datasource:数据源名;

    statement:SQL查询语句

  • public String getSQLSourceName(String dsName)

    读取数据源名;

    dsName:数据集名称;

    返回值:数据源名;

  • public String getSQLSourceStatement(String dsName)

    读取数据集的SQL语句;

    dsName:数据集名;

    返回值:SQL语句;

  • public String[] getSQLSources()

    读取已定义的数据集;

    返回值:已定义的数据集名;

  • public void setLinage(int linage)

    设置报表每页展现行数;

    linage:每页行数;

  • public DesignRow addRow()

    在报表末尾添加一个行;

    返回值:添加的行;

  • public DesignRow getRow(int row)

    读取指定的一行;

    row:行号;

    返回值:相应的行;

  • public void removeRow(int row)

    删除指定的一行;

    row:行号;

  • public void swapRow(int row1, int row2)

    交换两行位置;

    row1:行1;

    row2:行2

  • public int getRowCount()

    获得当前总行数;

    返回值:当前行数;

  • public DesignColumn addColumn()

    在报表末尾添加一个列;

    返回值:添加的列;

  • public DesignColumn getColumn(int col)

    读取指定的一列;

    col:列号;

    返回值:相应的列;

  • public void removeColumn(int col)

    删除指定的一列;

    col:列号;

  • public void swapColumn(int col1, int col2)

    交换两列位置;

    col1:列1;

    col2:列2;

  • public int getColumnCount()

    获得当前总列数;

    返回值:当前列数;

  • public void setCell(int row, int col, DesignCell cell)

    设置一个单元格于指定坐标;

    row:行坐标;

    col:列坐标;

    cell:单元格对象。

4 DesignPageSetup接口

4.1 简介

DesignPageSetup是报表的页面设置接口,其中包含纸张类型、页边距、页眉页脚等相关功能。

4.2 方法说明

  • public void setPageVertical()

    定义页面为垂直布局;

  • public void setPageHorizontal()

    定义页面为水平布局;

  • public boolean isPageVertical()

    判断报表页面是否为垂直布局;

  • public boolean isPageHorizontal()

    判断报表页面是否为水平布局;

  • public void setPaper(String type, double width, double height)

    设置页面纸张类型以及纸张尺寸;

    type:纸张类型,如A4、B5等;

    width:纸张宽度,单位为毫米;

    height:纸张高度,单位为毫米;

【注意】width、height与纸张方向相关,width始终代表纸张的左右方向的长度,height始终代表纸张垂直方向的长度。即如果修改纸张方向,需要交换width和height的值。

  • public double getPaperHeight()

    读取纸张高度;

  • public double getPaperWidth()

    读取纸张宽度;

  • public String getPaperType()

    读取纸张类型;

  • public void setTopMargin(float margin)

    设置纸张的上边距;

  • public void setRightMargin(float margin)

    设置纸张的右边距;

  • public void setLeftMargin(float margin)

    设置纸张的左边距;

  • public void setBottomMargin(float margin)

    设置纸张的的下边距;

  • public float getTopMargin()

    读取纸张的上边距;

  • public float getRightMargin()

    读取纸张的右边距;

  • public float getLeftMargin()

    读取纸张的左边距;

  • public float getBottomMargin()

    读取纸张的下边距;

  • public void setPageHeader(DesignCell leftcell, DesignCell midcell, DesignCell rightCell)

    直接定义页眉内容,页眉使用默认设置;

    leftcell:页面左侧内容单元格;

    midcell:页眉中间内容单元格;

    rightCell:页眉右侧内容单元格;

  • public void setPageFooter(DesignCell leftcell, DesignCell midcell, DesignCell rightCell)

    直接定义页脚内容,页脚使用默认设置;

    leftcell:页脚左侧内容单元格;

    midcell:页脚中间内容单元格;

    rightCell:页脚右侧内容单元格;

  • public DesignPageHeaderFooter getPageHeader()

    获得页眉对象,进行页眉及其内容的设置;

    返回值:页眉对象;

  • public DesignPageHeaderFooter getPageFooter()

    获得页脚对象,进行页脚及其内容的设置;

    返回值:页脚对象。

5 DesignPageHeaderFooter接口

5.1 简介

DesignPageHeaderFooter中显示方式常量的定义

常量含义 常量名称
全部显示 SHOWTYPE_ALL
偶数页显示 SHOWTYPE_EVEN
奇数页显示 SHOWTYPE_ODD
首页显示 SHOWTYPE_FIRST
尾页显示 SHOWTYPE_LAST
  • public void setShowType(int showType)

    设置显示方式;

    showType:显示方式常量;

  • public int getShowType()

    读取显示方式;

    返回值:显示方式常量;

  • public void setMargin(double margin)

    设置位置边距;

    Margin:边距值;

  • public double getMargin()

    读取位置边距;

    返回值:边距值;

  • public void setHeight(double height)

    设置高度;

    Height:高度值;

  • public double getHeight()

    读取高度;

    返回值:高度值;

  • public void setCells(DesignCell[] cells)

    设置一组单元格于该页眉或页脚,仅会使用其中的前3个;

    返回值:DesignCell数组;

  • public DesignCell getCell(int index)

    读取页眉页脚中的某个单元格;

    Index:单元格位置,从1开始至3;

    返回值:相应单元格。

6 DesignCell接口

6.1 简介

DesignCell是报表所有类型单元格实现的接口,已知单元格类型包括图片单元格(DesignPictrueCell)、图表单元格(DesignGraphCell)、斜线表头单元格(DesignDiagonalCell)和文本单元格(DesignTextCell)。

6.2 方法说明

  • public String getTopMaster()

    读取列依赖单元格格名称;

  • public String getLeftMaster()

    读取行依赖单元格名称 ;

  • public int getRowSpan()

    读取行合并;

  • public int getColSpan()

    读取列合并;

  • public String getLink()

    读取单元格超链接;

  • public void setTopMaster(String topmaster)

    设置列依赖;

  • public void setLeftMaster(String leftmaster)

    设置行依赖;

  • public void setRowSpan(int rspan)

    设置行合并,会合并该格的下方单元格;

    rspan:合并到一起的单元格数;

  • public void setColSpan(int cspan)

    设置列合并,会合并该格的右方单元格;

    cspan:合并到一起的单元格数;

  • public void setLink(String link)

    设置超链接;

    link:超链接,可以为公式串。

7 DesignTextCell接口

7.1 简介

DesignTextCell文本类型单元格接口;

7.2 方法说明

DesignTextCell中扩展方向常量的定义:

常量含义 常量名称
不扩展 NO_EXTEND
横向扩展 HORIZONTAL_EXTEND
纵向扩展 VERTICAL_EXTEND

DesignTextCell中对齐方式常量的定义:

常量含义 常量名称
水平对齐方式-居左 LEFT_ALIGN
水平对齐方式-居中 CENTERH_ALIGN
水平对齐方式-居右 RIGHT_ALIGN
垂直对齐方式-靠下 BOTTOM_ALIGN
垂直对齐方式-居中 CENTERV_ALIGN
垂直对齐方式-靠上 TOP_ALIGN

DesignTextCell中单元格文本格式的常量定义:

常量含义 常量名称
数值 FORMAT_TYPE_NUMERICAL
货币 FORMAT_TYPE_CURRENCY
日期 FORMAT_TYPE_DATE
百分数 FORMAT_TYPE_PERCENTAGE
分数 FORMAT_TYPE_FRACTION
科学计数法 FORMAT_TYPE_SCIENCE
特殊 FORMAT_TYPE_SPECIAL
  • public void setCaption(String caption)

    设置单元格标题;

  • public String getCaption()

    读取单元格标题;

  • public void setValue(String value)

    设置单元格的值;

  • public String getValue()

    读取单元格的值;

  • public void setAlign(int hAlign, int vAlign)

    设置单元格文字的对齐方式;

    hAlign:水平对齐方式,参见对齐方式的常量定义;

    vAlign:垂直对齐方式,参见对齐方式的常量定义;

  • public void setExtend(int extend)

    设置扩展方向;

    extend:扩展方向常量;

  • public int getExtend()

    获取扩展方向

  • public void setFormat(int type, String format)

    设置单元格格式

    type:单元格格式类型;

    format:指定单元格的格式串;

  • public int getFormatType()

    读取单元格类型;

  • public String getFormatString()

    读取单元格格式串;

  • public void setFont(Font font)

    设置单元格文字字体;

    font:字体;

  • public void setFont(Font font, boolean underline, boolean strikeout)

    设置单元格字体;

    font:字体对象;

    underline:下划线;

    strikeout:中划线;

  • public Font getFont()

    读取单元格字体;

    返回值:字体对象

  • public void setBgColor(Color color)

    设置单元格背景色;

    color:单元格背景色;

  • public void setBgColor(String formula);

    通过公式设置单元格背景色;

    formula:公式字符串;

  • public Color getBgColor();

    读取单元格背景色;

    返回值:单元格背景色;

  • public void setFgColor(Color color)

    设置文字颜色;

    color:单元格文字颜色

  • public void setFgColor(String formula)

    通过公式设置文字颜色;

    formula:文字颜色公式字符串;

  • public Color getFgColor()

    读取单元格文字颜色。

8 DesignPictureCell接口

8.1 简介

DesignPictureCell是图片类型单元格接口。

8.2 方法说明

  • public void setFilePath(String path)

    设置图片路径;

    path:图片路径,参数中可能为常量,也可能为字符串公式,参考《UniEAP Report公式查询手册》中的FilePicture公式;

  • public String getFilePath()

    读取图片路径。

9 DesignGraphCell接口

9.1 简介

DesignGraphCell是图表类型单元格接口。

9.2 方法说明

DesignGraphCell中图表类型常量的定义:

常量含义 常量名称
2D饼图 PIE2DCHART
3D饼图 PIE3DCHART
2D柱状图 COLUMN2DCHART
3D柱状图 COLUMN3DCHART
2D条形图 BAR2DCHART
3D条形图 BAR3DCHART
2D线图 LINE2DCHART
3D线图 LINE3DCHART
2D面积图 AREACHART

DesignGraphCell中图例位置常量的定义:

常量含义 常量名称
不扩展 LEGEND_RIGHT
横向扩展 LEGEND_BOTTOM

DesignGraphCell中文字旋转方向量的定义:

常量含义 常量名称
默认正常旋转方向(无旋转) ROTATION_DEFAULT
倾斜旋转(45度) ROTATION_SLANT
垂直旋转(90度) ROTATION_VERTICAL

DesignGraphCell中文本格式化类型的定义:

常量含义 常量名称
常规 FORMAT_TYPE_GENERAL
数值 FORMAT_TYPE_NUMERICAL
货币 FORMAT_TYPE_CURRENCY
百分数 FORMAT_TYPE_PERCENTAGE
  • public void setGraphType(int type)

    更改图表的类型;

    type:代表图表类型的常量;

  • public int getGraphType()

    获得该图表的类型;

    返回值:代表图表类型的常量;

  • public void setCategoryValue(String value)

    定义分类值;

    Value:分类值;

  • public void setCategoryCaption(String caption)

    定义分类标题;

    caption:分类标题;

  • public void addSeries(String name, String value)

    添加图表系列,该系列会缺省关联到主Y轴;

    name:系列名;

    value:系列值;

  • public void setSeriesAxis(int index, String axisName)

    设置系列关联轴;

    index:系列的序号,按照添加的顺序从0开始;

    axisName:关联的坐标轴名称,参见常量标识;

  • public void setSeriesColor(int index, Color color)

    设置系列的颜色;

    index:系列的序号,按照添加的顺序从0开始;

    color:设置的颜色;

  • public void setxAxisCaption(String caption)

    设置X轴标题;

    caption:标题;

  • public void setxAxisFont(Font font)

    设置X轴字体;

    Font:字体

  • public void setxAxisLabelRotation(int rotation)

    设置X轴标签旋转方向;

    rotation:X轴标签旋转方向,可以为正常、倾斜或垂直旋转,参见常量定义;

  • public void setxAxisLabelPadding(int padding)

    设置X轴标签位置;

    Padding:位置填充量;

  • public void setYAxisCaption(String caption)

    设置Y轴标题;

    Caption:标题;

  • public void setYAxisFont(Font font)

    设置Y轴字体;

    Font:字体;

  • public void setYAxisTitleRotation(int rotation)

    设置Y轴标题的旋转方向;

    rotation:Y轴标题旋转方向,可以为正常或垂直旋转,参见常量定义;

  • public void setYAxisDataFormat(int formatType, String formatString)

    设置Y轴的数据格式;

    formatType:格式类型,参见常量定义;

    formatString:格式串;

  • public void setSYAxisCaption(String caption)

    设置从Y轴标题;

    Caption:标题;

  • public void setSYAxisFont(Font font)

    设置从Y轴字体;

    font:字体;

  • public void setSYAxisDataFormat(int formatType, String formatString)

    设置从Y轴的数据格式;

    formatType:格式类型,参见常量定义;

    formatString:格式串;

  • public void setLegendPosition(int position)

    更改图例位置;

    Position:图例位置,参见常量定义;

  • public void addTrendLine(String name, double value)

    添加一条趋势线;

    Name:名称;

    value:值;

  • public void setTrendLineColor(int index, Color color)

    设置趋势线颜色;

    index:趋势线的序号,按照添加的顺序从0开始;

    color:颜色;

  • public void setTrendLineAxis(int index, String axisName)

    设置趋势线;

    index:趋势线的序号,按照添加的顺序从0开始;

  • public void setTitle(String title)

    定义图表标题;

    title:标题;

  • public void setTitleFont(Font font)

    定义图表标题字体;

    font:字体;

  • public void setSubTitle(String title)

    定义副标题;

    title:副标题;

  • public void setSubTitleFont(Font font)

    定义副标题字体;

    font:字体;

  • public void setShowValues(boolean show)

    设置是否显示数据值;

    show:true为显示, false不显示;

  • public void setBgColor(Color color)

    设置图表背景颜色;

    color:颜色。

10 DesignDiagonalCell接口

10.1 简介

DesignDiagonalCell是斜线表头类型单元格接口。

10.2 方法说明

  • public void setText(String text1, String text2)

    设置单斜线表头内容;

    text1:单元格左侧分割部分文字;

    text2:单元格右侧分割部分文字;

  • public void setText(String text1, String text2, String text3)

    设置双斜线表头内容;

    text1:单元格左侧分割部分文字;

    text2:单元格中间分割部分文字;

    text3:单元格右侧分割部分文字

  • public void setFont(Font font)

    设置单元格文字字体;

    font:字体;

  • public void setFgColor(Color color)

    设置单元格文字颜色;

    color:颜色;

  • public void setBgColor(Color color)

    设置单元格背景色;

    color:颜色。

11 DesignCells接口

11.1 简介

DesignCells是一组单元格的集合,为报表行(DesignRow)、报表列(DesignColumn)需要实现的接口。

11.2 方法说明

  • public void setCell(int index, DesignCell cell)

    设置一个单元格;

    index:待放置的位置;

    cell:待设置的单元格对象;

  • public void setBgColor(Color color)

    设置背景色,应在完成该组单元格设置后使用;

    color:背景色;

  • public void setBgColor(String formula)

    设置背景色,应在完成该组单元格设置后使用;

    formula:背景色颜色公式;

  • public void setFgColor(Color color);

    设置前景色,应在完成该组单元格设置后使用;

    color:前景色;

  • public void setFgColor(String formula);

    设置前景色,应在完成该组单元格设置后使用;

    formula:前景色颜色公式;

  • public DesignCell getCell(int index)

    获得单元格;

    index:指定的位置;

    返回值:单元格对象;

  • public void setCategory(int category)

    设置单元格区域类型;

    category:区域类型常量,如数据区等,参见相应的常量定义;

  • public int getCategory()

    获得区域类型;

    返回值:区域类型常量。

12 DesignColumn接口

12.1 简介

DesignColumn是报表列接口。

12.2 方法说明

  • public void setWidth(float width)

    设置宽度;

    width:宽度值

  • public float getWidth()

    读取宽度;

    返回值:宽度值;

  • public void setTopMaster(String master)

    设置列依赖;

    master:列依赖单元格坐标;

  • public String getTopMaster()

    获得列依赖;

    返回值:列以来单元格坐标;

  • public int getColumnNo()

    获得当前列号;

    返回值:当前列号。

13 DesignRow接口

13.1 简介

DesignRow是报表行接口。

13.2 方法说明

  • public void setHeight(float height)

    设置高度;

    height:高度值;

  • public float getHeight()

    读取高度;

    返回值:高度值;

  • public void setLeftMaster(String master)

    设置行依赖;

    master:行依赖单元格坐标;

  • public String getLeftMaster()

    获得行依赖;

    返回值:行依赖单元格坐标;

  • public int getRowNo()

    取得当前行号;

    返回值:当前行。

14 通过动态报表API定义报表的样例

package com.neusoft.report.sample.reportdef;
import java.awt.Color;

import javax.servlet.http.HttpServletRequest;

import com.neusoft.report.design.DesignReportManager;
import com.neusoft.report.design.define.DesignGraphCell;
import com.neusoft.report.design.define.DesignReport;
import com.neusoft.report.design.define.DesignRow;
import com.neusoft.report.design.define.DesignTextCell;
public class ExampleRequestReportBuilder {
    public DesignReport buildDesignReport(HttpServletRequest request) {
        // 读取参数
        String dsName = request.getParameter("dsname");
        dsName = dsName == null ? "ds1" : dsName;
        String sql = request.getParameter("sql");
        String datasource = request.getParameter("datasource");
        String name = request.getParameter("name");
        int cols = Integer.parseInt(request.getParameter("col"));
        DesignReport reportDef = DesignReportManager.getInstance()
                .createDesignReport(2, cols);
        reportDef.setName(name == null ? "TestReport" : name);

        reportDef.addSQLSource(dsName, datasource, sql);
        DesignTextCell text = null;

        DesignRow row = reportDef.getRow(1);
        row.setHeight(40);
        for (int i = 1; i <= cols; i++) {
            text = DesignReportManager.getInstance().createDesignText();
            text.setValue("第" + String.valueOf(i) + "列");
            row.setCell(i, text);
        }
        row.setCategory(DesignRow.CATEGORY_HEADER);
        row.setBgColor(new Color(128, 255, 128, 128));// 后设置行列颜色

        row = reportDef.getRow(2);
        text = DesignReportManager.getInstance().createDesignText();
        text.setValue("=select('" + dsName + "', 1)");
        text.setExtend(DesignTextCell.VERTICAL_EXTEND);
        row.setCell(1, text);

        for (int j = 2; j <= cols; j++) {
            text = DesignReportManager.getInstance().createDesignText();
            text.setValue("=get('" + dsName + "', " + String.valueOf(j) + ")");
            text.setLeftMaster("a2");
            row.setCell(j, text);
        }

        DesignRow newRow = reportDef.addRow();
        newRow.setCategory(DesignRow.CATEGORY_FOOTER);
        newRow.setHeight(100);
        DesignGraphCell graph = DesignReportManager.getInstance()
                .createDesignGraph(DesignGraphCell.BAR2DCHART);
        graph.addSeries("Series1", "=list(1,2,3,4,5)");
        graph.setCategoryValue("=list('A','B','C','D','E')");
        graph.setColSpan(cols);
        newRow.setCell(1, graph);
        DesignTextCell leftCell = DesignReportManager.getInstance()
                .createDesignText();
        leftCell.setValue("左页眉页脚");
        DesignTextCell midCell = DesignReportManager.getInstance()
                .createDesignText();
        midCell.setValue("中页眉页脚");
        DesignTextCell rightCell = DesignReportManager.getInstance()
                .createDesignText();
        rightCell.setValue("右页眉页脚");
        reportDef.getPageSetup().setPageHeader(leftCell, midCell, rightCell);
        reportDef.getPageSetup().setPageFooter(leftCell, midCell, rightCell);

        return reportDef;
    }

}

本示例代码更多内容请参见UniEAP Report相关发布包内样例演示。

15 报表定义对象持久化

  1. 调用com.neusoft.report.common.entity.def.parser.SDLParserFacade接口的 public static ReportDefineParser getReportDefineParser()方法,获得报表定义持久化对象ReportDefineParser;

  2. 调用ReportDefineParser的 public String parse(DefineReport define, String rid, String caption)或者 public String parse(DefineReport define)方法将报表定义生成为报表定义文件的xml格式字符串;

  3. 调用3.3.2.4节中介绍的public boolean newDefineXML(String id, String define)方法将报表定义xml存入报表支撑数据库中。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""