MaoBisheng

Asp.Net(C#) & SQL & Oracle

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

由于B/S系统是采用浏览器作为用户界面与服务器进行交互的,我们的应用程序是部署在服务器端,而打印机则在客户端,服务器端不能精确的控制客户端的打印机,使得B/S系统中的打印功能不像C/S系统中那么方便。

目前常见的几种Web打印方法(http://www.cnblogs.com/chenqingwei/archive/2009/10/09/1579467.html):

1.利用IE浏览器直接打印

——缺点:对于复杂的报表难以实现,且页面上哪些东西需要显示哪些需要隐藏,需要花费大量时间去分析

2.调用Office实现Web打印

——缺点:客户端必须要安装Office,导出数据前无预览功能

3.利用第三方控件实现打印

4.利用水晶报表实现打印


本人最近利用水晶报表实现了一个ERP系统中的单据打印功能,折腾了很久,在此做个记录:

最初为了图方便,页面上不用水晶报表控件,想直接使用PrintToPrinter通过一个打印按钮把东西给打印出来,结果本机用的好好的,部署到服务器上的时候,发现找不到客户端的打印机,代码如下:

protected void btnPrintDoc_Click(object sender, EventArgs e)
{
ReportDocument reportDoc
= GenerateDocReport();
reportDoc.PrintToPrinter(
1, true, 0, 0);
}

这种方法即便是可以,也有一些缺陷,比如预览功能没有,选择打印设置也没有。

直接打印不行,那么跳转到新页面,把参数传过去,在新页面上放个水晶报表控件,只显示导出和打印按钮:

<body>
<object classid="CLSID:BAEE131D-290A-4541-A50A-8936F159563A" codebase="http://127.0.0.1/rpt/PrintControl.cab"
version
="10,2,0,1078" viewastext style="display: none">
</object>
<form id="form1" runat="server">
<div>
<CR:CrystalReportViewer ID="DocumentReportView" runat="server" PrintMode="Pdf"
AutoDataBind
="true" HasCrystalLogo="False" HasDrilldownTabs="False" HasDrillUpButton="False"
HasExportButton
="True" HasGotoPageButton="False" HasPageNavigationButtons="False"
HasRefreshButton
="False" HasSearchButton="False" HasToggleGroupTreeButton="false"
HasToggleParameterPanelButton
="False" HasZoomFactorList="False" Height="50px"
ToolPanelView
="None" ToolPanelWidth="200px" Width="350px"/>
</div>
</form>
</body>


PrintMode设置成"ActiveX"

需要在WebConfig中做一些配置,在configuration节点下

  <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://127.0.0.1/rpt/PrintControl.cab" />
</printControl>
</crystalReports>
</businessObjects>

PrintControl.cab可以从官网下载,我只找到一个比较老的版本,链接地址:http://support.businessobjects.com/CRforVS2005/PrintControl.cab,VS2010也可以用

下载下来后,放到自己建立的一个文件夹下,发布到服务器上即可。

客户端第一个打开时,会提示安装一个ActiveX插件

我们要做的只是把报表生成即可,打印,导出功能,水晶报表都帮我们做好了,还是挺方便的。

缺点:

非IE内核的浏览器貌似不可以,不会提示让你安装ActiveX插件(我试了firefox4和Chrome,其他的没有试)。

既然浏览器不兼容,那么给点提示吧,免得用户点了木有反应:

    <script type="text/javascript">
$(
'#IconImg_DocumentReportView_toptoolbar_print').click(function () {
if (!$.browser.msie) {
alert(
"很抱歉,该打印功能目前只支持IE内核的浏览器!");
return false;
}
});
</script>
posted on 2011-07-21 15:44  MaoBisheng  阅读(8648)  评论(2编辑  收藏  举报