• 利用水晶报表实现Web打印(转)


    由于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>
  • 相关阅读:
    ASP.NET获取服务器信息大全
    放在IIS上就报错
    WEB资源管理器
    用于主题检测的临时日志(925f1df8130a43969337cfd4cbeb06a4 3bfe001a32de4114a6b44005b770f6d7)
    如何正确的判断String是否为空
    直接输出另存
    查询聊天消息SQL语句!
    ShareSDKUndefined symbols for architecture arm64
    今天起航...
    UIScrollView方法 scrollRectToVisible: animated: 无效(不工作,无效果)的问题
  • 原文地址:https://www.cnblogs.com/dwfbenben/p/2588854.html
Copyright © 2020-2023  润新知