標題:JSP報表列印的一種簡單解決方案
關鍵字:JSP 報表
作者:jrq
摘要:使用MS Office工具,解決JSP報表輸出列印的一種簡單方案。做備忘。
連結: http://blog.csdn.net/jrq/archive/2005/10/21/510523.aspx
本文:
1. 在Word或Excel中製作報表的樣式。
Excel的行高和列寬單位無法用MM或CM表示,需要計算。
Excel工作表中預設的行高值為14.25(19像素),預設的列寬值為8.38(72像素)。
根據計算可以知道,1CM約為38像素。
以此為基準,可計算並控制輸出報表的行列位置。
2. 在Word中設定“表格——標題列重複”。
在Excel中設定“檔案——版面設定——工作表——列印標題”。
設定完成後,在列印報表時,每頁的標題會自動重複。
這是MS_Office工具提供的功能 :)
3. 另存新檔網頁,改尾碼名“htm”為“jsp”。
這樣可以直接編輯此jsp檔案。
4. Word報表的JSP檔案頭為:
<%@page contentType="application/msword;charset=GBK" language="java"%>
Excel報表的JSP檔案頭為:
<% @page contentType="application/vnd.ms-excel;charset=GBK" language="java"%>
5. 編輯JSP檔案,在檔案頭部分定義列印參數變數如下(以Excel為例):
<%
//需要列印的記錄條數
int PrintRowCount=RowCount;
//每頁列印的記錄條數
int PageRowCount=16;
//最後一頁需要列印的空行的數目
int LoopNum=PageRowCount-PrintRowCount%PageRowCount;
//列印範圍的高度,其中2的意思是每頁需要重複的標題列的數目
int PrintAreaHeight=(PrintRowCount%PageRowCount==0)?PrintRowCount+2:PrintRowCount+LoopNum+2;
%>
6. 在<style></style>後,改動<!--[if gte mso 9]與<![endif]-->標籤中的XML標籤內容,主要是設定動態列印範圍(以Excel為例):
<%
out.print(" ......
"<x:ExcelName>"+
"<x:Name>Print_Area</x:Name>"+
"<x:SheetIndex>1</x:SheetIndex>"+
"<x:Formula>=Sheet1!$A$1:$G$"+PrintAreaHeight+"</x:Formula>"+
"</x:ExcelName>"+
...... ");
%>
此處通過控制 PrintAreaHeight 可以調整列印範圍的行數。
7. JSP其他編碼工作。
下面是主體迴圈列印部分(以Excel為例):
<%
for (int i=1;i<=PrintRowCount; i++)
{
out.print("<tr>"<td>"+i+"</td></tr>"); //有內容
}
if (LoopNum!=PageRowCount) //有空行則列印空行補齊最末一頁
for (int j=1;j<=LoopNum; j++)
{
out.print("<tr><td> </td></tr>");//無內容
}
%>
8. 測試列印,並繼續重複修改JSP檔案代碼。
總結:整體的工作流程是:MS Office--->HTML--->JSP--->MS Office 。
使用MS Office工具,簡單的完成了JSP報表的輸出列印。 ^_^
但是要求用戶端使用者必須安裝有MS Office工具。
jrq
2005.10.21 淩晨於廣州