报表组展现A打印B
需求:润乾报表在发布报表的html标签中,提供了一个printedRaq标签,用于展现和打印的报表不是同一张的时候,即展现一张报表,打印另一张报表。如果报表组要实现这一的功能,该怎么做呢?
分析:不管报表还是报表组的打印都是通过servlet来打印的,可以打开一个展现报表组页面的源代码看一下,下图是打印报表组的js方法
从上面的图片中可以看到,打印报表组的方法其实就是页面跳转后请求了一个servlet,servlet根据参数的不同,打印不同的报表组。分析一下参数,其中报表组名称(reportFileName)、参数缓存池ID(reportParamsId)、时间ID(t_i_m_e)、是否选择打印机(needSelectPrinter)是动态的,因为时间ID是在缓存时用到的,这个需求中用不到缓存所以这个参数不是必须的。是否选择打印机这个参数可以给它一个默认值。然后就剩下两个必须的动态参数,一个是报表组名称、参数缓存池ID。只要能提供这两个参数,就可以实现展现一个报表组,打印另一个报表组。
实现:报表组名称可以直接提供,参数缓存池ID可以页面中生成。
下面是jsp的写法:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setCharacterEncoding( "GBK" );
String groupName = request.getParameter( "rpg" ); //展现报表组名称
String printGroupName = request.getParameter("printRpg"); //打印的报表组名称
StringBuffer param=new StringBuffer();
Enumeration paramNames = request.getParameterNames();
Hashtable
String reportParamsId = null;
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);
if(paramValue!=null){
//把参数拼成name=value;name2=value2;…..的形式
param.append(paramName).append(“=”).append(paramValue).append(“;”);
//把参数和参数值放到hashtabal里面
hash.put(paramName, paramValue);
}
}
}
//把存放参数的hashtable放到参数缓存池中
if(hash.size()>0){
reportParamsId = ParamsPool.createParamsId();
ParamsPool.put( reportParamsId, hash);
}
%>
制作两个不同的报表组,通过上面的jsp进行展现。 比如浏览报表组的url:http://127.0.0.1:8080/demo/jsp/groupDirectPrint.jsp?rpg=testGroup.rpg&printRpg=testGroup_2.rpg&arg_one=12 注:rpg是展现报表组的名称,printRpg是打印报表组的名称,arg_one是参数名称。 预览截图如下: 从上图中可以看出展现的是报表一和报表二,打印的是报表三和报表四。 上图是报表三打印预览界面。 通过上面的方法就可以实现展现一个报表组,打印另个一个报表组。 热门文章 |