而且crystalReportviewer 控件有着強大的報表功能,其中包括顯示報表,預覽,縮印等,很大程度上方便了開發人員的開發。但是在使用crystalReportviewer的控件進行打印的時候總是遇到這樣那樣的問題。
首先要聲明的是:crystalReportviewer的打印有兩種模式可選擇,分別是PDF, AcitiveX。
其中PDF,就是在選擇打印的時候,會生成一個PDF文檔,你可以在PDF文檔中點擊打印。但是如果客戶端沒有裝PDF閱讀器那麼會提示保存一個PDF的文件。很顯然對於想直接打印的用戶來說,PDF格式的打印方法很是不方便。
第二種就是ActiveX模式了。一看到ActiveX就讓人想到安全性的問題。的確,如果你要使用這個ActiveX模式,就是要在服務器端做一番工作的。還有就是設置你客戶端的安全設置了。
但是這種模式,只能用於IE的瀏覽器,其他比如火狐等瀏覽器時不能使用這種模式的,即使你強制把crystalReportviewer的printmode屬性設爲ActiveX,他仍舊會按PDF模式來進行打印的。
既然只能在IE中使用,那我們先談談在IE中使用的方法。
在IE7之前的瀏覽器一般你點擊打印按鈕時,會彈出一個對話框但是什麼都不顯示。在 Crystal Reports for Visual Studio 2005 中,爲符合icrosoft 安全性需求起見,並沒有將ActiveX打印控制項安裝在本機上,而是必須製成.cab檔案,讓人從外部URL來獲取。printControl.cab文件可以從Business Objects 技術網站上:http://support.businessobjects.com/CRforVS2005/PrintControl.cab中下載下來,這時就可以將 cab檔案放在 Web 服務器目錄中,以供 URL 存取之用。如果想在瀏覽器中提示安裝該ActiveX,需要在web.config中添加如下代碼:
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<printControl>
<add key="url" value="http://localhost/demo/PrintControl.cab" />
</printControl>
</crystalReports>
</businessObjects>
添加上述代碼之後,在IE6或之前的版本中運行,點擊打印的時候,會彈出安裝ActiveX的對話框,安裝後便可以選擇打印機了。
但是如果是IE7的話,由於IE7默認設置了不自動提示ActiveX的安裝,所以彈出一個空白對話框後過一會又會消失。
你可以在Tools -> Internet explore option-->Security Tab -> Custom Level ->Under ActiveX controls and plug-ins -> Enable Automatic prompting for ActiveX controls.
這樣就可以實現ActiveX控件的安裝窗口了。