ireport 怎么动态改改变宽度

 我来答
pieryon
推荐于2017-10-10 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166868
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部

在iReport中,本身并没有提供动态列的功能,但我们可以通过Java代码进行处理,来实现。

这里以iReport 4.5版本为例。


步骤1:设计报表

该报表必须含有一个参数:dynamiccolumn (名字可以随便取,类型必须为java.util.Collection)

步骤2:通过Java代码进行处理,并生成报表

public static void main(String[] args) {

try {

//步骤1:获取JasperDesign

JasperDesign jdesign = JRXmlLoader

.load("jrxmls//dynamiccolumn.jrxml");


Map<String, Object> params = new HashMap<String, Object>();

params.put("dynamiccolumn",

java.util.Arrays.asList(new String[] { "No","Name","Gender"}));

//步骤2:根据dynamiccolumn参数,对不需要显示的列进行删除

dynamiccolumn(jdesign,params);


// 步骤3:报表修改完成后,以修改后报表进行编译,并输出

JasperReport jreport = JasperCompileManager.compileReport(jdesign);

Connection conn = null;

try {

conn = DriverManager.getConnection(

"jdbc:mysql://10.24.16.31:3306/ireportrun", "root",

"isoftstone*1");

} catch (SQLException e) {

e.printStackTrace();

}

JasperPrint jprint = JasperFillManager.fillReport(jreport, params,

conn);

JasperExportManager.exportReportToHtmlFile(jprint,

"reports//dynamiccolumn.html");

} catch (JRException e) {

e.printStackTrace();

}

}

/**

* @Title: dynamiccolumn

* @Description: TODO(对design进行处理,去掉不应该显示的列)

* @param @param jdesign JasperDesign

* @param @param params 需要显示的列

* @return JasperDesign 返回类型

*/

public static JasperDesign dynamiccolumn(JasperDesign jdesign, Map params) {

/*

* 该方法目前仅进行了简单的处理,如需更多业务,且自行添加 比如:1. 修改元素的位置 2.自动调整Title的宽度

* 3.自行调整整个报表的宽度

*/

Collection dynamiccolumns = (Collection) params.get("dynamiccolumn");

if (dynamiccolumns != null) {


JRDesignBand cHeader = (JRDesignBand) jdesign.getColumnHeader();

JRBand cDetailBand = jdesign.getDetailSection().getBands()[0];

JRDesignBand cDetail = null;

if (cDetailBand != null && cDetailBand instanceof JRDesignBand) {

cDetail = (JRDesignBand) cDetailBand;

}

JRElement[] es_header = cHeader.getElements();

JRElement[] es_detail = cDetail.getElements();

for (int i = 0; i < es_header.length; i++) {

JRDesignElement e = (JRDesignElement) es_header[i];

String v = "";

if (e instanceof JRStaticText) {

JRStaticText text = (JRStaticText) e;

v = text.getText();

}

if (!dynamiccolumns.contains(v)) {

for (int j = 0; j < es_detail.length; j++) {

JRDesignElement ee = (JRDesignElement) es_detail[i];

if (ee.getY() == e.getY()) {

cDetail.removeElement(ee);

}

}

cHeader.removeElement(e);

}

}

}

return jdesign;

}

报表运行结果:

308948501
2012-07-17 · 超过10用户采纳过TA的回答
知道答主
回答量:137
采纳率:0%
帮助的人:136万
展开全部
你的意思是需要打印的资料的列数不固定,那样的话需要用交叉报表来做 很简单的 在组建面板中选择Subreport控件根据提示选择数据来源的数据表,行.列等等信息 就可以根据你选择的列的字段的数据来自动改变报表的宽度.

都是我自己手打的 要给我分哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
半亩瘦田
2012-07-15 · 超过18用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:39.3万
展开全部
不明白阁下的意思,是字段的自动换行么。。。。
如果是自动换行可以看看那这个,帖子
http://wenku.baidu.com/view/553ded24aaea998fcc220ee2.html

参考资料: http://wenku.baidu.com/view/553ded24aaea998fcc220ee2.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式