快逸报表打印时不弹出任何打印对话框实现打印任意报表份数
打印是web报表应用中最常用的功能之一,设置打印份数又是打印设置的一个环节,一般的设置打印份数都是通过弹出一个对话框来进行设置,但是有些用户的某些应用中不想出现对话框,只想通过一个按钮就实现所有过程。本文介绍如何实现不弹出与打印机交互的对话框实现打印报表份数的需求。
这个问题听起来好像很难实现,但是用快逸解决起来却非常简单,利用提供的批量打印功能便能够很轻松的实现报表打印份数的需求,并且在此过程中不弹出任何对话框。
下面就以一个例子来说明如何实现标题所述的需求。
实现思路:
快逸报表批量打印实现一次打印多张报表的功能,因此也就可以使用参数控制一次打印相同的报表任意次,从而实现打印一张报表任意份数的需求。
下面介绍一下该需求的具体实现过程:
第一步:快逸报表复杂报表设计" target="_blank" class="quieeLink1">设计
1, 参数模版报表设计,如下:
2,随便新建一个浏览式报表,内容如下:
第二步:编写发布报表并实现多份数打印的JSP文件
完整Jsp内容如下:
<%@ page contentType=”text/html;charset=GBK” %>
<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %>
<%@ page import=”com.runqian.report4.usermodel.Context”%>
<%@ page session=”true” import=”java.lang.StringBuffer,com.runqian.report4.usermodel.*”%>
<%@ page import=”java.util.*”%>
<%@ page import=”com.runqian.report4.view.*”%>
<%@ page import=”com.runqian.base4.util.*”%>
<%
request.setCharacterEncoding( “GBK” );
//这里为两种方法准备图片连接的公共部分
String appmap = request.getContextPath();
String printImage = “<img alt=打印 src=’” + appmap + “/images/print.gif’ border=no style=’vertical-align:middle’>”;
String wordImage = “<img alt=导出Word src=’” + appmap + “/images/doc.gif’ border=no style=’vertical-align:middle’>”;
String excelImage = “<img alt=导出excel src=’” + appmap + “/images/excel.gif’ border=no style=’vertical-align:middle’>”;
String pdfImage = “<img alt=导出PDF文件 src=’” + appmap + “/images/pdf.gif’ border=no style=’vertical-align:middle’>”;
String textImage = “<img alt=导出TXT文件 src=’” + appmap + “/images/txt.jpg’ border=no style=’vertical-align:middle’>”;
String firstPageImage = “<img src=’” + appmap + “/images/firstpage.gif’ border=no style=’vertical-align:middle’>”;
String lastPageImage = “<img src=’” + appmap + “/images/lastpage.gif’ border=no style=’vertical-align:middle’>”;
String nextPageImage = “<img src=’” + appmap + “/images/nextpage.gif’ border=no style=’vertical-align:middle’>”;
String prevPageImage = “<img src=’” + appmap + “/images/prevpage.gif’ border=no style=’vertical-align:middle’>”;
//获取报表文件
String report = request.getParameter( “raq” );
String reportFileHome=Context.getInitCtx().getMainDir();
StringBuffer param=new StringBuffer();
//保证报表名称的完整性
int iTmp = 0;
if( (iTmp = report.lastIndexOf(”.raq”)) <= 0 ){
report = report + “.raq”;
iTmp = 0;
}
String prompt = request.getParameter( “prompt” );
String serverPort = String.valueOf( request.getServerPort() );
String serverName = request.getServerName();
String appRoot = “http://” + serverName + “:” + serverPort + appmap;
//得到form表单传递的报表份数
String fs =request.getParameter(”fs”);
StringBuffer fs1 = new StringBuffer();
int fs2 = Integer.parseInt(fs);
for(int i=1;i<=fs2;i++){
fs1 = fs1.append(”{”+report+”}”);
}
String pr = fs1.toString();
%>
<!–报表内容的展现部分–>
<table align=left>
<tr><td>
<report:html name=”report1″ reportFileName=”<%=report%>”
needSaveAsWord=”yes”
needSaveAsPdf=”yes”
needSaveAsExcel=”yes”
needSaveAsText=”yes”
excelPageStyle=”1″
wordLabel=”<%=wordImage%>”
pdfLabel=”<%=pdfImage%>”
excelLabel=”<%=excelImage%>”
textLabel=”<%=textImage%>”
/>
</td></tr>
</table>
<!–实现批量打印的部分,也就是实现多份数打印部分–>
<object classid=”clsid:8AD9C840-044E-11D1-B3E9-00805F499D93″
codebase=”<%=appRoot%>/j2re-1_4_1-windows-i586-i.exe#Version=1,4,1,0″ width=”40″
height=”16″ id=”report1_directPrintApplet” style=”vertical-align:middle”>
<param name=”name” value=”report1_directPrintApplet”>
<param name=”code” value=”com.runqian.report4.view.applet.DirectPrintApplet.class”>
<param name=”archive” value=”<%=appmap%>/runqianReport4Applet.jar”>
<param name=”type” value=”application/x-java-applet;version=1.4″>
<param name=”appRoot” value=”<%=appRoot%>”>
<param name=”dataServlet” value=”/reportServlet?action=1″>
<param name=”srcType” value=”file”>
<param name=”fontFace” value=”宋体”>
<param name=”fontSize” value=”18pt”>
<param name=”fontColor” value=”#0000FF”>
<param name=”backColor” value=”#12632256″>
<param name=”label” value=”打印”>
<param name=”needPrintPrompt” value=”<%=prompt%>”>
<param name=”scriptable” value=”true”>
</object>
<script language=javascript>
function runqian_getPrintReports() {
//请在此函数里加上打印前需要的处理,最后返回需要打印的报表
return “<%=pr%>”;
}
</script>
第三步:发布应用
访问报表的地址为(demo应用为例):
http://127.0.0.1:6001/demo/jsp/1.1.jsp?fs=3&raq=testFS.raq
其中,fs是要打印的份数,raq是要打印的报表文件
发布应用后,报表显示效果如下:
点击打印按钮后,即可直接打印报表所需要的份数(此例中为3份),并且在此过程中没有任何对话框出现。因此,通过以上步骤便实现了不弹出任何对话框,实现报表份数的打印功能。