程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 水晶報表Web打印的四種方法

水晶報表Web打印的四種方法

編輯:關於ASP.NET

如果想使用戶能夠打印在 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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved