如何實現報表的批次列印需求

xiaohuihui發表於2019-12-29

在 web 報表應用中,經常會遇到批次列印的需求,即點選一次列印按鈕,實現多張報表的列印輸出。潤乾報表提供了兩種不同的列印方式(applet 列印、PDF 列印)實現批次列印需求,同時也支援橫縱報表列印。下面我們就來看一下每一種方式的具體實現方法。

一、applet 批次列印

1、環境配置要求

applet 列印要求客戶端至少正確配置了 jre 環境

目前 applet 列印只支援 IE 核心瀏覽器

2、實現方法

可透過訪問 jsp 拼接引數的方式實現,示例 URL 為:

不帶引數:

帶引數:

引數拼接格式說明:

report={無引數報表名 1}{無引數報表名 2}{報表 1( 引數 1=value1; 引數 2=value2;…)}{報表 2( 引數 1=value1; 引數 2=value2;…)}…&prompt=yes&needSelectPrinter=yes

3、示例原始碼

directprint.jsp 頁面完整程式碼:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.raqsoft.report.view.*"%>
<html>
<body>
<%
//此JSP引數格式為:report={無引數報表名1}{無引數報表名2}{報表1(引數1=value1;引數2=value2;...)}{報表2(引數1=value1;引數2=value2;...)}...&prompt=yes&needSelectPrinter=yes
request.setCharacterEncoding( "UTF-8" );
  String report = request.getParameter( "report" );
  //"請輸入報表檔名及引數串report={無引數報表名}{報表1(引數1=value1;引數2=value2;...)}{報表2(引數1=value1;引數2=value2;...)}..."
  if( report == null || report.trim().length() == 0 ) throw new
Exception( ServerMsg.getMessage(request,"jsp.dpArgError") );
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 = "
String printLabel = ServerMsg.getMessage(request,"jsp.dpPrint");
%>
<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="dialog">
<param name="fontSize" value="10pt">
<param name="fontColor" value="#808040">
<param name="backColor" value="#126356">
<param name="label" value="<%=printLabel%>">
<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="dialog"
fontSize="10pt"
fontColor="#808040"
backColor="#126356"
label="<%=printLabel%>"
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>
<script language=javascript>
/*
function raqsoft_printOver() {
window.close();
}*/
</script>
</body>
</html>

二、PDF 批次列印

1、環境配置要求

瀏覽器安裝了 PDF 外掛。特殊地,IE 瀏覽器只識別 adobe reader 外掛,不識別其他 PDF 外掛

PDF 列印方式無瀏覽器限制,可相容常用瀏覽器。

2、實現方法

可透過訪問 jsp 拼接引數的方式實現,示例 URL 為:

不帶引數:

帶引數:

引數拼接格式說明:

report={無引數報表名}{報表 1( 引數 1=value1; 引數 2=value2;…)}{報表 2( 引數 1=value1; 引數 2=value2;…)}

3、示例原始碼

pdfBatchPrint.jsp 頁面完整程式碼:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.net.*" %>
<%@ page import="com.raqsoft.report.view.*"%>
<html>
<title>PDF列印報表</title>
<head>
</head>
<body>
<%
//此JSP引數格式為:report={無引數報表名1}{無引數報表名2}{報表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" );
%>
<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" id=pdfobj width="100%" height="100%" border="1">
<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>
</body>
</html>

imagepng

此問題需要將 URL 中的特殊字元進行轉義處理,在 Tomcat7 以上版本以及 IE 瀏覽器中測試時易出現。例如:

{ 轉義後是:%7B    

} 轉義後是:%7D

也就是我們在測試時,需要把如下 URL 換成轉義後的 URL:

原始 URL:

轉義後可正常訪問的 URL:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900830/viewspace-2671120/,如需轉載,請註明出處,否則將追究法律責任。

相關文章