JS实现jasperreport交叉报表输出页面居中效果

    在struts2整合jasperreport报表开发的时候,遇到了这么一个问题。在报表模版使用了交叉报表的时候,
我们知道所有的行和列都是动态生成的。那么我们在设计报表模版的时候一般会根据列的最大值情况设置报表的整体
宽度。当在某一个查询条件下可能只需要用部分列,这样的话,报表整体宽度不会变,默认需要显示的列会靠左显示,
其他部分则通过无色底图或者固定宽的html元素填充。
针对此对简单的解决方案就是通过JS重新布局输出的html,这样的话就不会去jasperreport内部生成机制了。
如果要实现通用性,就必须让输出的html代码是可读的,有规律可循的。所以通过各种尝试,通过设置一下属性,可以让输出的html
尽量小并且便于用JS进行通用解析。
exporter = new JRHtmlExporter();
 exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, true);
                //不使用嵌套表格
                exporter.setParameter(JRHtmlExporterParameter.FRAMES_AS_NESTED_TABLES, false);
                //忽略默认HEADER,FOOTER
                exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, " ");
                exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, " ");
                //忽略空白处填充图片
                exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, false);

 

JS代码

function loadReportPage(url){
	
	$("#reportContent").load(url,function(){
		adjustReportHTML();
		//TODO 
	});
}

//重新布局载入的报表内容html代码
function adjustReportHTML(){
	try {
	   var $table = $("#reportContent table:eq(0)");
	    var $headerTR = $("#reportContent tr:eq(0)");
	    var headerTdCount = $headerTR.find("td").length;
	    
	    var $firstInnerTR = $("#reportContent tr:eq(2)");
	    var firstInnerTd = $firstInnerTR.find("td:last-child");
	    
	    //设置报表table宽度
	    var tableOldWidth = $table.css('width').replace("px","");
	    var reduceWidth = firstInnerTd.css('width').replace("px","");
	    var tableNewWidth = tableOldWidth - reduceWidth;
	    tableNewWidth = tableNewWidth<500 ? 500 : tableNewWidth;
	    $table.css('width',tableNewWidth);
	    
	    //设置报表内容空白区域TD宽度
	    var colspan = firstInnerTd.attr("colspan");
	    $("td[colspan='"+colspan+"']").each(function(index){
	        $(this).css("width",colspan+"px");
	    });
	    
	    //设置报表标题区域空白TD宽度
	    for(var i=1;i<=3;i++){
	    	var resetIndex = headerTdCount-i;
	        $headerTR.find("td:eq("+ resetIndex +")").css("width","1px");
	    }
	} catch (e) {}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值