[原创]vs2005水晶报表WEB打印问题、加载报表失败。-解决办法
我使用VS2005开发WEB系统,需要打印报表,使用Reporting Service 2005,但调试到打印时,出现自定义纸张21*14,宽超过高时,就出现自动横向页,强制纵向打印就失真了,无办法,只好放弃,使用VS2005自带的水晶报表,我放到三四级目录时,调试老是提示“加载报表失败。”不知为何,我已经搜索过相关文章需要用相关路径改为"../../xxx/xxx"时,在CrystalReportViewer控件内可正常阅览,但调试在WEB中打开就提示“加载报表失败”,郁闷,新建立一个项目,将所有东西都放到项目根目录一且正常,又不知为和,现在就是将PrintMode="ActiveX"后,点打印按钮弹出一个摸态窗,但毫无反应,也不提示安装ActiveX,这回是真不知道为什么了,但如果是打印为PDF是正常弹出,也是正常打印出PDF,晕。
发到CSDN也是没有回答,只有人问。
我GOOGLE遍所有地方都未找到答案,也只是老是见到有人问这个问题,就是没有人回答,真是心寒呀。
水晶报表调试的确比较麻烦,因为一直看到别人发贴说麻烦,搞得没有用就开始心荒了,上面是我前几天遇到的问题。
问题解决,找到原因了,有两个原因
不知道是不是巧合,前两天因深圳有小地震,说是光缆坏了,访问国外网站有点慢。
不知道为什么水晶报表不把ActiveX提供给用户自已放到自已服务器下载,一定要链接到他的服务去下载,导致我很久连接不上,搞得ActiveX安装失败。
还有就是不知道是不是我安了IE7的原因,说IE权限不够,不能安装,我将权限都打开,再将ActiveX用迅雷下载回来放到本地,自已写代码安装后成功了。
这里是在家里调试的结果,因为家里安装的是IE7,下面的第二天在办公室调试的结果,办公室是IE6.
===================================
微软MSDN给的答案
使用 ActiveX 控制項列印
在 Crystal Reports 的更新版本中,您可以使用新的 CrystalReportViewer.PrintMode 屬性來指定列印模式。其中包含兩個列舉型別:ActiveX 和 PDF。
當屬性設定為 PrintMode.PDF 時,報表會在 Web 伺服器上匯出為 PDF,然後以資料流傳送到瀏覽器。使用者可以利用選項,直接列印至印表機。這個選項是跨平台相容的。
當屬性設定為 PrintMode.ActiveX 時,ActiveX 列印控制項允許使用者將報表直接列印至本機印表機。
注意 在 Crystal Reports for Visual Studio 2005 中,為符合 Microsoft 安全性需求起見,並沒有將 ActiveX 列印控制項安裝在本機電腦上。而是必須製成 .cab 檔案,讓人從外部 URL 來存取。PrintControl.cab 檔案可以從 Business Objects 技術支援網站下載取得,這時就可以將 cab 檔案放在 Web 伺服器虛擬目錄中,以供 URL 存取之用。
若要在 Crystal Reports for Visual Studio 2005 網站顯示 cab 檔案,請將下列 xml 加入網站的 web.config 檔案:
<configSections>
<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://myserver/PrintControl.cab" />
</printControl>
</crystalReports>
</businessObjects>
注意 只有 Internet Explorer 才會支援 ActiveX 控制項。若從非 Internet Explorer 的用戶端 (FireFox、Safari、Mozilla 等) 列印,將會回復到 PDF 匯出對話方塊。
=====================================
经过我的测试,是IE升级了补丁,对摸态窗的安全加强了,所以就算你将文件放到本地服务器估计也安装失败,除非你自已写代码连续弹出两次摸态窗,才会提示安装,不过这样给用户是不可能的。
我测试过,将代码写入摸态窗,打开页面就自动弹出执行会出错,除非你设个定时器,过30秒或一分钟后再弹出是正常的。
所以完全可以将他的CAB下载回来放到本地服务器,然后写下面代码放到一个单独的页面放用户先安好。
先下载http://support.businessobjects.com/CRforVS2005/PrintControl.cab,放到自已的服务器上。
<object id="CrystalPrintControl" classid="CLSID:BAEE131D-290A-4541-A50A-8936F159563A" codebase="http://127.0.0.1/rpt/PrintControl.cab" #Version="10,2,0,1078" viewastext></object>
#Version是版本号,如果你是其他的版本将版本号修改一下即可。
接着是加载报表失败的问题,因为我新建立一个空项目是正常的,代码是肯定没有问题,所以问题一定在WEB.CONFIG配制文件里,因为我的环境比较复杂,所以WEB.CONFIG是很多配制,就一个一个拆吧,拆到<identity impersonate="true"/>时,也,正常了,原来是不能将他设为true,将他改为<identity impersonate="false"/>就正常了。
调试到一段落,再来后面还会遇到很多麻烦,再一个一个去解决吧。