如果想使用戶能夠打印在 Web 上訪問的整個多頁報表,您有下列選項:
1、使用Web 窗體 Viewer 工具欄上的“打印”按鈕將報表導出為 PDF。
2、使用Web 窗體 Viewer 工具欄上的“導出”按鈕,導出報表為可以由客戶端的現有應用程序打印的格式。
3、使用PrintToPrinter 方法從服務器打印報表。
4、將報表作為一個連續的頁提供以通過 Internet Explorer 浏覽器在客戶端啟用打印。
如果用戶無權訪問打印導出的報表所需的應用程序,並且服務器端打印存在安全性或訪問權限問題,您可能需要使用戶能夠從他們的浏覽器打印報表。此方法將整個報表作為一個連續的頁顯示在 Web 窗體 Viewer 控件中,因而能夠使用浏覽器的打印功能。
在應用程序中,可以在現有 Web 窗體 Viewer 旁邊添加一個按鈕,該按鈕可以將客戶端重定向到新的、在浏覽器中將整個報表顯示為一個連續頁的 Web 窗體 Viewer。可以對第二個窗體上的查看器進行格式化,以便禁用組樹和工具欄,並將查看器的 SeparatePages 屬性設置為 False。
注意 這種打印方法有一個局限,即無法控制頁眉、頁腳和分頁符的定位。
crReportDocument = New Income_Statement()
CrystalReportViewer1.ReportSource = crReportDocument
CrystalReportViewer1.SeparatePages = False
CrystalReportViewer1.DisplayGroupTree = False
CrystalReportViewer1.DisplayToolbar = False
如果你是下邊的情況,你也可以使用下列另類的方式嘗試報表Web打印:
第一種方法是購買第三方的網上打印控件,費用同水晶報表相比便宜,但效果性能到底如何則仁者見仁了。
第二種方法是利用樣式表及JavaScript自定義函數實現。通過樣式表及JavaScript,實現網頁打印,效果也還可以。在此有一個實例請大家看看。下面是打印函數實現詳解:
<script language="JavaScript" type="text/JavaScript">
<!--
function DP() {
if (window.print)
{
var Div1 = document.all.Div1.innerHTML;
var Div2 = document.all.Div2.innerHTML;
// *****************************************************
// Div1、Div2即為你在打印的區域
// 這裡根據你要打印的哪些內容,從原顯示頁面中用
// <div id=Div1>Div1....</div><div id=Div2>Div2...</div>
// 等標示出來,要打印多少項目就標示多少
// ***************************************************** var css = '<style type="text/css" media=all>' +
'p { line-height: 120%}' +
'.ftitle { line-height: 120%; font-size: 18px; color: #000000}' +
'td { font-size: 10px; color: #000000}' +
'</style>' ;
// *****************************************************
// 定義打印用的CSS,具體你想打印出什麼樣的格式全看你自己
// 了,但要注意:如果此處有什麼同網頁中不一致的,可能打印
// 出來的頁面同網頁格式、字體可能會有所不同
// *****************************************************
var body ='<table width="640" border="0" cellspacing="0" cellpadding="5">' +
' <tr> ' +
' <td class="fbody"> ' +
' <div align="center" class=ftitle>' + Div1 + '</div>' + Div2 +
' </td>' +
' </tr>' +
'</table>';
// ******************************************************
// 在此處重新設置的打印格式,根據你的打印要求,將原顯示的
// 網頁的DIV內容重新組合,可以根據你原來的表格內容,去掉
// 不要打印的,你也可以能下面定義的noprint忽略掉你不想打
// 印的東西,只調用你要打印的內容,但這樣被忽略掉的地方將
// 打印出空,不是很美觀。表格寬度要同打印的紙張寬度匹配。
// ******************************************************
document.body.innerHTML = '<center>' + css + body + '</center>';
// ******************************************************
// 重設document.body,打印文檔准備就緒
// ******************************************************
window.print();
window.history.go(0);
// ******************************************************
// 調用打印命令,打印當前窗口內容。當你打印時其實是一張新
// 的網頁了,但網頁文件還是原先的。緊接著調用
// window.history.go(0),再回到打印前的頁面,效果相當不差
// ******************************************************
}
}
-->
</script>
<style>
@media print {
.noprint {display:none}
}
</style>
<!--//.noprint 定義了noprint,在以下不需要打印的地方加入 class="noprint"後,用window.print()打印就會忽略-->
好了,一切就緒了,現在要做的就是調用DP函數,如果你將實現調用的按鈕設計在同一張網頁上,則直接調用即可;如果你用了分幀方法,實現調用的按鈕是在另一張網頁上,則在DP函數的第一行加入window。