搜索文章

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 报表技术分享 > 报表组展现A打印B

报表组展现A打印B

需求:快逸报表在发布报表的html标签中,提供了一个printedRaq标签,用于展现和打印的报表不是同一张的时候,即展现一张报表,打印另一张报表。如果报表组要实现这一的功能,该怎么做呢?

分析:不管报表还是报表组的打印都是通过servlet来打印的,可以打开一个展现报表组页面的源代码看一下,下图是打印报表组的js方法

从上面的图片中可以看到,打印报表组的方法其实就是页面跳转后请求了一个servletservlet根据参数的不同,打印不同的报表组。分析一下参数,其中报表组名称(reportFileName)、参数缓存池IDreportParamsId)、时间IDt_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, String> hash = new Hashtable<String, String>();

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);

}

%>

<html>

<head><title>报表不展现,直接打印,带打印预览</title>

</head>

<body><!–显示打印窗口的iframe–>

<iframe name=”group_print_IFrame” id=”group_print_IFrame” src=”a.html” style=”position:absolute;left:-100px;top:-100px” width=50 height=50></iframe>

<script type=”text/javascript”>

function new_group_print() {

document.group_print_IFrame.location = “<%=basePath%>reportServlet?action=2&name=group&reportFileName=<%=printGroupName%>&isGroup=1&needSelectPrinter=yes&appletJarName=runqianReport4Applet.jar&reportParamsId=<%=reportParamsId%>”;

}

</script>

<table align=center>

<tr><td><input type=”button” value=”打印” id=”report_print” onClick=”new_group_print()”></td></tr>

<tr><td>

<report:group groupFileName=”<%=groupName%>”

funcBarLocation=”top”

params=”<%=param.toString()%>”

exceptionPage=”/reportJsp/myError2.jsp”

isInput=”no”

/>

</td></tr>

</table>

</body>

</html>

制作两个不同的报表组,通过上面的jsp进行展现。

比如浏览报表组的urlhttp://127.0.0.1:8080/demo/jsp/groupDirectPrint.jsp?rpg=testGroup.rpg&printRpg=testGroup_2.rpg&arg_one=12

注:rpg是展现报表组的名称,printRpg是打印报表组的名称,arg_one是参数名称。

预览截图如下:

从上图中可以看出展现的是报表一和报表二,打印的是报表三和报表四。

上图是报表三打印预览界面。

通过上面的方法就可以实现展现一个报表组,打印另个一个报表组。