水晶报表的客户端打印问题

时间:2022-12-02 08:34:07
我使用VS2005做了一个网站,
其中使用水晶报表打印一个类似于发票的东东,
并且在公司的局域网内进行测试。

发布以及访问网站都一切顺利。
但是,当我在客户端试图打印该水晶报表时,客户端并非出现打印的窗口,反而是服务器端调出打印窗口。
请问这是什么原因,应该怎么解决。
急用!
1个小时内结帖。
谢谢各位大侠。

9 个解决方案

#1


需要说明的是,客户端与服务器端都有打印机,而且打印机名称是一样的

#2


使用 ActiveX 控制項列印

在 Crystal Reports 的更新版本中,

~JKvkZ国E,bQx\

您可以使用新的 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 等) 列印,T的DMhOY教i?z网供R$f6

{5x0K软Z网u'mI5中

將會回復到 PDF 匯出對話方塊。
=====================================

经过我的测试,是IE升级了补丁,对摸态窗的安全加强了,所以就算你将文件放到本地服务器估计也安装失败,除非你自已写代码连续弹出两次摸态窗,才会提示安装,不过这样给用户是不可能的。

我测试过,LSG教*q$件e^件La将代码写入摸态窗,
?网Ij)-6网w~业\+LK-z*`

打开页面就自动弹出执行会出错,除非你设个定时器,过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是版本号,
s'Z'理$E!4v的ck
如果你是其他的版本将版本号修改一下即可。



接着是加载报表失败的问题,因为我新建立一 个空项目是正常的,代码是肯定没有问题,所以问题一定在WEB.CONFIG配制文件里,因为我的环境比较复杂,所以WEB.CONFIG是很多配制,就 一个一个拆吧,拆到<identity impersonate="true"/>时,也,正常了,原来是不能将他设为true,将他改为<identity impersonate="false"/>就正常了。

#3


有亂碼,再貼一次:
使用 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是版本号,如果你是其他的版本将版本号修改一下即可。


#4


谢谢forgot(忘记forgot2000)大人
非常详细,也非常长(笑)。。。
我去试试看,我在BAIDU上搜过也说过要改PrintMode,我试过了不成功。
可能是因为没有CAB文件。

#5


呼唤forgot(忘记forgot2000)

不成功,为什么,泪。

设定时器是在什么时候设?点击打印按钮时?还是打印窗口打开的onload事件中写?
可不可以用延时?

#6


to:forgot(忘记forgot2000)
按forgot的办法,糊里糊涂的成功了。

我的情况是:asp.net 2.0应用,vs2005自带的CrystalReport,客户端有些机子可以直接打印,有些就是无法安装ActiveX控件。PrintMode当然已经设成ActiveX.

在web.config里加上forgot的那些配置后客户端终于调出打印框了。

thank you. 不过这糊里糊涂的感觉不怎么爽,以后再研究研究:-)

#7



 
  
报表打印控件wsReport4.6 
 
 

#8


不错

#9




<html>
<head>
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
<title>***上海市眼病防治中心病人结帐费用报表***</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!--media=print 这个属性可以在打印时有效-->
<style media=print>
.Noprint{display:none;}
.PageNext{page-break-after: always;}
 

</style>
<style>
body,td,th 
{
font-size: 12px;
}
.tdp
{
    border-bottom: 1 solid #000000;
    border-left:  1 solid #000000;
    border-right:  0 solid #ffffff;
    border-top: 0 solid #ffffff;
}
.tabp
{
    border-color: #000000;

border-collapse:collapse;
}
.NOPRINT {
font-family: "宋体";
font-size: 12px;
}

</style>

</head>

<body >
  <OBJECT  id=WebBrowser  classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2  height=0  width=0 VIEWASTEXT>
  </OBJECT>
<input type=button value=打印     onclick="document.all.WebBrowser.ExecWB(6,1)" class="NOPRINT">
<input type=button value=直接打印 onclick="document.all.WebBrowser.ExecWB(6,6)" class="NOPRINT">
<input type=button value=页面设置 onclick="document.all.WebBrowser.ExecWB(8,1)" class="NOPRINT">
<input type=button value=打印预览 onclick="document.all.WebBrowser.ExecWB(7,1)" class="NOPRINT">
  <br/>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" >
  <tr align="center"> 
    <td colspan="5"><font size="3">上海市眼病防治中心病人结帐费用报表(A) </font></td>
  </tr>
  <tr> 
    <td>汇总人次 5</td>
    <td>费用合计 15853.12</td>
    <td>统计日期 </td>
    <td>制表人 023</td>
    <td>制表日期:2004-05-13</td>
  </tr>
</table>



<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000"  class="tabp" >
  <tr> 
    <td  >姓名</td>
    <td   >住院号</td>
    <td   >科室</td>
    <td   >结帐日期</td>
    <td   >出院日期</td>
    <td   >费用合计</td>
    <td   >医保交易费用</td>
    <td   >分类给付费用</td>
    <td   >非医保交易费</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>

  </tr>
  <tr>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>

  </tr>
</table>
<hr align="center" width="90%" size="1" noshade class="NOPRINT" >
<!--分页-->
<div class="PageNext"></div>
<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000"  class="tabp">
  <tr>
    <td >第2页</td>
  </tr>
  <tr>
    <td >看到分页了吧</td>
  </tr>
  <tr>
    <td >&nbsp;</td>
  </tr>
  <tr>
    <td >&nbsp;</td>
  </tr>
  <tr>
    <td ><table width="100%"  border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="50%" >这样的报表
              对一般的要求就够了。</td>
          <td>&nbsp;</td>
        </tr>
    </table></td>
  </tr>
</table>
</body>
</html>



#1


需要说明的是,客户端与服务器端都有打印机,而且打印机名称是一样的

#2


使用 ActiveX 控制項列印

在 Crystal Reports 的更新版本中,

~JKvkZ国E,bQx\

您可以使用新的 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 等) 列印,T的DMhOY教i?z网供R$f6

{5x0K软Z网u'mI5中

將會回復到 PDF 匯出對話方塊。
=====================================

经过我的测试,是IE升级了补丁,对摸态窗的安全加强了,所以就算你将文件放到本地服务器估计也安装失败,除非你自已写代码连续弹出两次摸态窗,才会提示安装,不过这样给用户是不可能的。

我测试过,LSG教*q$件e^件La将代码写入摸态窗,
?网Ij)-6网w~业\+LK-z*`

打开页面就自动弹出执行会出错,除非你设个定时器,过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是版本号,
s'Z'理$E!4v的ck
如果你是其他的版本将版本号修改一下即可。



接着是加载报表失败的问题,因为我新建立一 个空项目是正常的,代码是肯定没有问题,所以问题一定在WEB.CONFIG配制文件里,因为我的环境比较复杂,所以WEB.CONFIG是很多配制,就 一个一个拆吧,拆到<identity impersonate="true"/>时,也,正常了,原来是不能将他设为true,将他改为<identity impersonate="false"/>就正常了。

#3


有亂碼,再貼一次:
使用 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是版本号,如果你是其他的版本将版本号修改一下即可。


#4


谢谢forgot(忘记forgot2000)大人
非常详细,也非常长(笑)。。。
我去试试看,我在BAIDU上搜过也说过要改PrintMode,我试过了不成功。
可能是因为没有CAB文件。

#5


呼唤forgot(忘记forgot2000)

不成功,为什么,泪。

设定时器是在什么时候设?点击打印按钮时?还是打印窗口打开的onload事件中写?
可不可以用延时?

#6


to:forgot(忘记forgot2000)
按forgot的办法,糊里糊涂的成功了。

我的情况是:asp.net 2.0应用,vs2005自带的CrystalReport,客户端有些机子可以直接打印,有些就是无法安装ActiveX控件。PrintMode当然已经设成ActiveX.

在web.config里加上forgot的那些配置后客户端终于调出打印框了。

thank you. 不过这糊里糊涂的感觉不怎么爽,以后再研究研究:-)

#7



 
  
报表打印控件wsReport4.6 
 
 

#8


不错

#9




<html>
<head>
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
<title>***上海市眼病防治中心病人结帐费用报表***</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!--media=print 这个属性可以在打印时有效-->
<style media=print>
.Noprint{display:none;}
.PageNext{page-break-after: always;}
 

</style>
<style>
body,td,th 
{
font-size: 12px;
}
.tdp
{
    border-bottom: 1 solid #000000;
    border-left:  1 solid #000000;
    border-right:  0 solid #ffffff;
    border-top: 0 solid #ffffff;
}
.tabp
{
    border-color: #000000;

border-collapse:collapse;
}
.NOPRINT {
font-family: "宋体";
font-size: 12px;
}

</style>

</head>

<body >
  <OBJECT  id=WebBrowser  classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2  height=0  width=0 VIEWASTEXT>
  </OBJECT>
<input type=button value=打印     onclick="document.all.WebBrowser.ExecWB(6,1)" class="NOPRINT">
<input type=button value=直接打印 onclick="document.all.WebBrowser.ExecWB(6,6)" class="NOPRINT">
<input type=button value=页面设置 onclick="document.all.WebBrowser.ExecWB(8,1)" class="NOPRINT">
<input type=button value=打印预览 onclick="document.all.WebBrowser.ExecWB(7,1)" class="NOPRINT">
  <br/>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0" >
  <tr align="center"> 
    <td colspan="5"><font size="3">上海市眼病防治中心病人结帐费用报表(A) </font></td>
  </tr>
  <tr> 
    <td>汇总人次 5</td>
    <td>费用合计 15853.12</td>
    <td>统计日期 </td>
    <td>制表人 023</td>
    <td>制表日期:2004-05-13</td>
  </tr>
</table>



<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000"  class="tabp" >
  <tr> 
    <td  >姓名</td>
    <td   >住院号</td>
    <td   >科室</td>
    <td   >结帐日期</td>
    <td   >出院日期</td>
    <td   >费用合计</td>
    <td   >医保交易费用</td>
    <td   >分类给付费用</td>
    <td   >非医保交易费</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>

  </tr>
  <tr>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>
    <td   >&nbsp;</td>

  </tr>
</table>
<hr align="center" width="90%" size="1" noshade class="NOPRINT" >
<!--分页-->
<div class="PageNext"></div>
<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000"  class="tabp">
  <tr>
    <td >第2页</td>
  </tr>
  <tr>
    <td >看到分页了吧</td>
  </tr>
  <tr>
    <td >&nbsp;</td>
  </tr>
  <tr>
    <td >&nbsp;</td>
  </tr>
  <tr>
    <td ><table width="100%"  border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="50%" >这样的报表
              对一般的要求就够了。</td>
          <td>&nbsp;</td>
        </tr>
    </table></td>
  </tr>
</table>
</body>
</html>