由于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>
出处:http://maobisheng.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。