none
如何优化这个打印功能 RRS feed

  • 问题

  •     下面这段代码是去掉页眉页脚,并且只打印sprnstr = "<!--startprint-->";到
            eprnstr = "<!--endprint-->";之间的内容。

        在界面中我设计了一个DropDownList,可以选择不同的数据行打印,但是每次我打印完一页,界面中的控件<input button...>就消失了,必须按F5才行。目前我只能在window.print();后加上window.location.reload();来强制刷新页面(图1),可是这样还是必须手动点击“重试”才行(如图2).

        我的问题是:1.有什么更好的办法让<input button...>不消失么?

                          2.如果没有更好的办法,至少可以不用每次都点击“重试”么?

    -------------------------------------代码1--------------------------------

    <script   type="text/javascript">
        var HKEY_Root, HKEY_Path, HKEY_Key;
        HKEY_Root = "HKEY_CURRENT_USER";
        HKEY_Path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
        //设置网页打印的页眉页脚为空 
        function PageSetup_Null() {
            try {
                var Wsh = new ActiveXObject("WScript.Shell");
                HKEY_Key = "header";
                Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
                HKEY_Key = "footer";
                Wsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
            }
            catch (e)
    { }
    
        }
        
    
        function preview() {
            bdhtml = window.document.body.innerHTML;
            sprnstr = "<!--startprint-->";
            eprnstr = "<!--endprint-->";
            prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17);
            prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
            window.document.body.innerHTML = prnhtml;
            PageSetup_Null();
            window.print();
            window.location.reload(); 
            
            
        }
    </script>
    <body>
    <DropDownList .....................
    <input type="button" name="print" value="预览并打印" onclick="preview()" />

    --------------------------------------图1------------------------------------

    -------------------------------------------图2--------------------------------------------


    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!


    2013年7月2日 1:17

答案


  • <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>打印测试</title>
        <style type="text/css">
            @media print
            {
                .noprint
                {
                    display: none;
                }
            }
        </style>
        <object id="WebBrowser" classid="ClSID:8856F961-340A-11D0-A96B-00C04Fd705A2" width="0"
            height="0">
        </object>
    </head>
    <body>
        <form id="form1" runat="server">
        <div class="noprint">
            这些都不会打印</div>
        <table border="1">
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
        </table>
        <div class="noprint">
            这些也不会打印
            <div>
                <a href="#" onclick=" document.all.WebBrowser.Execwb(7, 1) ">打印预览</a> <a href="#"
                    onclick=" document.all.WebBrowser.Execwb(6, 1) ">打印</a><a href="#" onclick=" document.all.WebBrowser.Execwb(8, 1) "></a>
            </div>
        </div>
        </form>
    </body>
    </html>
    一般可以用WebBrowser+css来控制。
    • 已建议为答案 彭123 2013年7月12日 14:57
    • 已标记为答案 linjiangxian11 2013年7月15日 8:28
    2013年7月12日 3:44

全部回复

  • Hi,

    因為您把整個body都給置換掉了呀!

    // window.document.body.innerHTML = prnhtml;


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年7月2日 1:35
  • 怎么修改啊?

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2013年7月2日 3:40
  • 我想你可以将这些要打印的内容放置在一个div中,要打印的话只打印相应的div就可以了 不需要的打印的东西你还把放置在div外面,这样的话无论你点击打印,打印的页面不会有变动,按钮的位置也不会发生变化

    2013年7月4日 8:16
    版主

  • <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>打印测试</title>
        <style type="text/css">
            @media print
            {
                .noprint
                {
                    display: none;
                }
            }
        </style>
        <object id="WebBrowser" classid="ClSID:8856F961-340A-11D0-A96B-00C04Fd705A2" width="0"
            height="0">
        </object>
    </head>
    <body>
        <form id="form1" runat="server">
        <div class="noprint">
            这些都不会打印</div>
        <table border="1">
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
            <tr>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
                <td>
                    fdsfds
                </td>
            </tr>
        </table>
        <div class="noprint">
            这些也不会打印
            <div>
                <a href="#" onclick=" document.all.WebBrowser.Execwb(7, 1) ">打印预览</a> <a href="#"
                    onclick=" document.all.WebBrowser.Execwb(6, 1) ">打印</a><a href="#" onclick=" document.all.WebBrowser.Execwb(8, 1) "></a>
            </div>
        </div>
        </form>
    </body>
    </html>
    一般可以用WebBrowser+css来控制。
    • 已建议为答案 彭123 2013年7月12日 14:57
    • 已标记为答案 linjiangxian11 2013年7月15日 8:28
    2013年7月12日 3:44
  •     谢谢您的解答,效果非常完美!我就奇怪了,怎么网上那么多关于打印的例子,却很少有这么方便快捷的!

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2013年7月15日 8:28
  •     谢谢您的解答,效果非常好!我就奇怪了,网上那么多关于打印的例子,怎么就没有这么方便快捷的。

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2013年7月15日 8:29
  • 网上也有的,只是你没有搜索到吧。
    2013年7月15日 8:33
  •     我发现这个代码需要调整IE的ActiveX相关设置,默认设置下不能直接打印,略为麻烦。

    C# 菜鸟中的雏鸟!提的问题也许很幼稚,但我是认真的。希望看在党国的面子上拉兄弟一把!

    2013年7月16日 0:50
  • 这是没有办法的事情,例如用RDLC或者水晶报表都是要安装插件的。WEB打印至少我知道的就那么几种方法。

    当让,你不想安装插件之类的话,你只能自己开发一个浏览器了,然后规定对方只能用你的浏览器,就能解决你所说的问题。

    2013年7月16日 0:54