批量直接打印

阅读(1065) 标签: 批量打印, applet打印, pdf打印,

客户端经常需要对报表进行批量打印,此时可以调用applet打印或者PDF打印进行批量打印操作,用法如下:

applet打印:

<%

//JSP参数格式为:report={无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}...&prompt=yes&needSelectPrinter=yes

request.setCharacterEncoding( "UTF-8" );

String report = request.getParameter( "report" );

if( report == null || report.trim().length() == 0 ) throw new Exception( "请输入报表文件名及参数串report={无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}..." );

String prompt = request.getParameter( "prompt" );

String needSelectPrinter = request.getParameter( "needSelectPrinter" );

String pages = request.getParameter( "pages" );

String copies = request.getParameter( "copies" );

if( pages == null ) pages = "";

if( copies == null ) copies = "1";

String appmap = request.getContextPath();

String serverPort = String.valueOf( request.getServerPort() );

String serverName = request.getServerName();

String appRoot = "http://" + serverName + ":" + serverPort + appmap;

%> 

<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"  codebase="<%=appRoot%>/jre-6u24-windows-i586.exe#Version=1,6,0,0"  width="80" height="32" id="report1_directPrintApplet" style="vertical-align:middle">

<param name="name" value="report1_directPrintApplet"> 

<param name="code" value="com.raqsoft.report.view.applet.DirectPrintWithoutShow.class"> 

<param name="archive" value="<%=appmap%>/raqsoftReportApplet.jar"> 

<param name="type" value="application/x-java-applet;version=1.6"> 

<param name="appRoot" value="<%=appRoot%>"> 

<param name="dataServlet" value="/reportServlet;jsessionid=<%=session.getId()%>?action=1">

<param name="fileName" value="<%=report%>"> 

<param name="srcType" value="file"> 

<param name="fontFace" value="宋体"> 

<param name="fontSize" value="10pt"> 

<param name="fontColor" value="#808040"> 

<param name="backColor" value="#126356"> 

<param name="label" value="打印">  

<param name="needPrintPrompt" value="<%=prompt%>">

<param name="needSelectPrinter" value="<%=needSelectPrinter%>">

<param name="needSetPageSize" value="no">

<param name="scriptable" value="true">

<param name="paramCharset" value="UTF-8">

<param name="blackWhitePrint" value="no">

<param name="mirrorPrint" value="no">

<param name="icon" value="/raqsoft/images/print.gif">

<param name="copies" value="<%=copies%>">

<param name="pages" value="<%=pages%>">

<comment>

<embed type="application/x-java-applet;version=1.6" width="80" height="32" id="report1_directPrintApplet"

code="com.raqsoft.report.view.applet.DirectPrintWithoutShow.class"

archive="<%=appmap%>/raqsoftReportApplet.jar"

type="application/x-java-applet;version=1.6"

appRoot="<%=appRoot%>"

dataServlet="/reportServlet;jsessionid=<%=session.getId()%>?action=1"

fileName="<%=report%>"

srcType="file"

fontFace="宋体"

fontSize="10pt"

fontColor="#808040"

backColor="#126356"

label="打印"

needPrintPrompt="<%=prompt%>"

needSelectPrinter="<%=needSelectPrinter%>"

needSetPageSize="no"

scriptable="true"

paramCharset="UTF-8"

blackWhitePrint="no"

mirrorPrint="no"

copies="<%=copies%>"

pages="<%=pages%>"

icon="/raqsoft/images/print.gif">

</embed>

</comment>

</object>

打印其它相关知识:

1.  批量打印时,可以在第一张报表打印前弹出一个页面设置窗口,用户输入新的页面设置数据后,所有的报表都可以使用此设置进行打印

 方法:在directprint.jsp中增加下面的参数

 <param name="needSetPageSize" value="yes">

2.  批量打印时,也可以使用以前保存的客户端打印设置,在directprint.jsp中增加下面的参数

 <param name="savePrintSetup" value="yes">

3.  html报表、打印方式发布的报表、批量打印报表在打印完成后,均可以回调页面中的一个js函数,以便让用户可以实现打印后的处理事件.用户在页面中写一个名称为raqsoft_printOver()javaScript函数,通过此函数实现打印后的处理

 

PDF打印:

<script language=javascript>

var myToast;

function showToast() {

myToast = $().toastmessage('showToast', {

text  : '<%=ServerMsg.getMessage(request,"jsp.loadingPrint")%>',

sticky  : true,

position : 'middle-center',

type:  'notice'

});

  }

function closeToast() {

$().toastmessage('removeToast', myToast);

}

</script>

……

<%

//JSP参数格式为:report={无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}

request.setCharacterEncoding( "UTF-8" );

String report = request.getParameter( "report" );

if( report == null || report.trim().length() == 0 ) throw new Exception( "请输入报表文件名及参数串report={无参数报表名}{报表1(参数1=value1;参数2=value2;...)}{报表2(参数1=value1;参数2=value2;...)}..." );

String src = request.getContextPath() + ServletMappings.getMapping( "com.raqsoft.report.view.ReportServlet" ) + "?action=45&report=" + URLEncoder.encode( report, "UTF-8" );

String preview = request.getParameter( "preview" );

if( "no".equalsIgnoreCase( preview ) ) {

String url = appmap + ReportConfig.raqsoftDir + "/pdfjs/pdfDirectPrint.jsp?src=" + URLEncoder.encode( src, "UTF-8" );

%>

  <iframe src="<%=url%>" style="position:absolute;left:-100px;top:-100px" width=50 height=50></iframe>

<script language=javascript>

showToast();

</script>

<%

}

else {%>

<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" id=pdfobj width="100%" height="100%" border="0">

<param name="_Version" value="65539">

<param name="_ExtentX" value="20108">

<param name="_ExtentY" value="10866">

<param name="_StockProps" value="0">

<param name="SRC" value="<%=src%>">

<comment>

<embed id=pdfobj1

type="application/pdf"

src="<%=src%>"

width="100%"

height="95%">

</embed>

  </comment>

</object>

<% } %>

 

PDF批量打印可访问pdfBatchPrint.jsp示例url如:http://localhost:6868/demo/reportJsp/pdfBatchPrint.jsp?report={a.rpx}{b.rpx(bid=10248;eid=10250)}&preview=yes

当参数preview的值为no时,则为直接批量打印;无此参数或参数值不为no时,则为预览后批量打印。