zoukankan      html  css  js  c++  java
  • JS打印和报表输出

    JS打印和报表输出2008-07-15 22:16一打印:

    转自:http://hi.baidu.com/afei0211/blog/item/20523955ca8bebc2b745ae98.html

    (1) 在实际应用中!特别是一些公司需要报表输出和打印!这个时候我们就会用到JS的打印和报表输出功能!当然打印很简单就是window.print();你也可以在按钮的onclick事件中写上return print()可以实现打印效果!这个时候打印你会发现打印出来的是整个页面,包裹着网站的logo和一些其他不需要的按钮!这个时候我们可以使用div控制一下。把不需要打印的东西用<div class="noPrint">不 打印的内容 </div> 然后

    <style type="text/css" media="print">
        .noprint{display:none;}
        </style>

    这个时候就可以实现打印时不打印其他信息的效果!


    说明:
    1.除去页眉页脚:通过浏览器的"页面设置"选项把其中的"页眉"和"页脚"的内容清空即可.
    2.打印出背景色:通过浏览器的"工具"-"internet选项"-"高级"-"打印"-"打印背景色和图像"选中即可.

    (2) 同时可以使用使用WebBrowser打印.(ie内置组件无需安装,可实现打印预览等功能)

    使用方法在页面中放置如下代码:<object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0">
    </object>

    在按钮中调用OnClick="return userPrint()"

    function userPrint()
    {
        document.WebBrowser.Execwb(7,1);//打印预览
        return false;
    }

    调用WebBrowser进行打印等操作(参数列表)

    WebBrowser.ExecWB(1,1) 打开
    WebBrowser.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
    WebBrowser.ExecWB(4,1) 保存网页
    WebBrowser.ExecWB(6,1) 打印
    WebBrowser.ExecWB(7,1) 打印预览
    WebBrowser.ExecWB(8,1) 打印页面设置
    WebBrowser.ExecWB(10,1) 查看页面属性
    WebBrowser.ExecWB(15,1) 好像是撤销,有待确认
    WebBrowser.ExecWB(17,1) 全选
    WebBrowser.ExecWB(22,1) 刷新
    WebBrowser.ExecWB(45,1) 关闭窗体无提示

    效果图:
                           



    如果要一个页面显示2个表格,打印时让2个分页的话可以使用div隔开2个表格在他们中间加:<div class="PageNext"></div> 样式:<style media="print" type="text/css">
    .PageNext{page-break-after: always;}
    </style>
    二:输出到Word或Excel中(转自《灰灰虫的家》)

    实现思路,用JavaScript创建word或Excel对象,然后复制页面中需要输出的内容,粘贴在Word或Excel对象的文档中去.
    //输出到Word中
    function Button2_onclick() {
    //创建Word应用程序对象
    var oWD = new ActiveXObject("Word.Application");
    //向Word应用程序对象中添加一个文档对象,并取出其中的Range(0)
    var oRange =oWD.documents.add().Range(0,0);
    //根据HTML页面创建TextRange对象,以便定位到要打印的元素中
    var sel = document.body.createTextRange();
    //定位到TextRage对象中要打印的元素上,GridView1是要打印的元素的ID
    sel.moveToElementText(GridView1);
    //选中GridView1元素的所有HTML内容
    sel.select();
    //将选中的内容复制到剪切板上
    sel.execCommand("Copy");
    //粘贴到Word文档对象中去
    oRange.Paste();
    //显示Word程序和文档内容
    oWD.Application.Visible = true;
    //调用Word的打印程序
    //oWD.application.printout();
    //关闭word文档对象,参数0代表不保存文档
    //oWD.application.activedocument.close(0);
    //退出word程序
    //oWD.application.quit();
    }
    //输出到Excel中
    function Button3_onclick() {
    var oXL = new ActiveXObject("Excel.Application");
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var sel=document.body.createTextRange();
    sel.moveToElementText(GridView1);
    sel.select();
    sel.execCommand("Copy");
    oSheet.Paste();
    oXL.Visible = true;
    }



    总结:这种方式可以快速地将页面的内容转换到Word或Excel中,其功能是在客户端实现,减轻了服务器的压力.
    这里在使用的时候浏览器会提示"是否允许对剪切板的访问",可以在IE的Internet选项中的"安全"中进行设置.
    这种方式只适合在Windows平台上的转换.

    三.根据己有的word或excel文件样式输出报表(转自《灰灰虫的家》)
    实现思路:在服务器端建立一个Word或Excel文档,文档中加入书签,然后把要添写的内容写入标签中.
    (1)创建一个Word文档,在该文档中设计好要打印的会议记录的格式,并将其保存到实例根目录下,名称为student.doc。

    (2)在创建好的Word文档中的指定位置插入书签。插入书签首先选中需要替换的文本,然后选择“插入”→“书签”选项,在打开的对话框中输入书签名,并单击“添加”按钮即可。

    (3)编写自定义JavaScript函数,用于将表单收集的数据导出到Word中,并进行自动打印,代码如下:
    服务器端
       protected void Page_Load(object sender, EventArgs e)
        {
            string str = Request.Url.ToString();
            string s = str.Substring(0, str.LastIndexOf("/"));
            //将当前页面的父路径存入Hidden中
            this.Hidden1.Value = s + "/";
        }
    客户端
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
         <title>无标题页</title>
    <script language="javascript" type="text/javascript">
    function Button1_onclick() {
    //取出Hidden中的内容
    var ss = document.form1.Hidden1.value;
    //创建word应用程序对象
    var wordapp = new ActiveXObject("word.application");
    //显示word应用程序窗口
    wordapp.visible=true;
    //设置word文件模板的路径
    var s = ss+"student.doc";
    //打开要填写的模板
    var worddoc = wordapp.application.documents.open(s);
    var range;
    //取出word中相应的书签,并把页面文本框中的内容替换进去
    range = wordapp.activedocument.Bookmarks("sname").Range;
    range.text = document.form1.txtName.value;
    range = wordapp.activedocument.bookmarks("sage").range;
    range.text = document.form1.txtAge.value;
    range = wordapp.activedocument.bookmarks("sschool").range;
    range.text = document.form1.txtSchool.value;
    //wordapp.activedocument.printout();
    //关闭word文档
    wordapp.activedocument.close(0);
    //关闭word应用程序
    wordapp.quit();
    }
    </script>
    </head>
    <body>
         <form id="form1" runat="server">
         <div>
        
             姓名:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
             <br />
             年龄:<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
             <br />
             学校:<asp:TextBox ID="txtSchool" runat="server"></asp:TextBox>
             <br />
             <input id="Button1" type="button" value="ToBookMark" onclick="return Button1_onclick()" /><input runat=server id="Hidden1" name="Hidden1" type="hidden" /></div>
         </form>
    </body>
    </html>

    转自: http://tiwson.iteye.com/blog/618232

  • 相关阅读:
    什么样的代码称得上是好代码?
    九年程序人生 总结分享
    Docker入门 第一课 --.Net Core 使用Docker全程记录
    阿里云 Windows Server 2012 r2 部署asp.net mvc网站 平坑之旅
    Visual studio 2015 Community 安装过程中遇到问题的终极解决
    Activiti6.0 spring5 工作流引擎 java SSM流程审批 项目框架
    java 进销存 库存管理 销售报表 商户管理 springmvc SSM crm 项目
    Leetcode名企之路
    24. 两两交换链表中的节点
    21. 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/wyBlog117/p/4567692.html
Copyright © 2011-2022 走看看