IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    php 打印

    usity发表于 2015-07-23 14:27:03
    love 0

    http://www.usity.org/?p=1823

     

    实现页面打印的方法有三种,一种是调用Window.print(),一种是wb.execwb(),下面是有关这几种方法的一点资料:

    注意:第二种方法的控件需要IE5.5+的支持,而且因为使用了控件,如果客户端IE的安全性设置过高,将无法正常运行。
    特别提示
    运行本例代码,如果已经安装了打印机,将直接调用打印机打印页面,否则提示安装打印机。

    1.用window对象的print方法

    <button onClick="window.print()">打印</button>

    2.用WebBrowser控件


    <object id="WebBrowser" width=0
    height=0
    classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>
    <button
    onClick="WebBrowser.ExecWB(8,1)">打印</button>

    3.在文档区域执行print命令

    <button onClick="document.execCommand('print')">打印</button>

    window.print()的使用

     window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型,套打的问题更加无从谈起,只不过,可以让用户不用去点菜单,直接点击网页中的一个按钮,或一个链接里面调用罢了。事实上,很多用户都是采用这种方式打印,但是这种方式最致命的缺点是不能设置打印参数,比如纸型,页边距,选择打印机等等。

     需要指出的是这种方法提供一个打印前和打印后的事件onbeforeprint、onafterprint。可以在打印前的时候重新编辑一些格式,专门送去打印,打印后又处理回来。

    function
    window.onbeforeprint()
    {
    //将一些不需要打印的隐藏
    }
    function
    window.onafterprint()
    {
    //放开隐藏的元素
    }

    通过这两个方法,就可以实现页面的部分打印.

    web打印的大全:

    1、控制"纵打"、横打”和“页面的边距。
    (1)<script defer>
    function
    SetPrintSettings() {
    // -- advanced
    features
    factory.printing.SetMarginMeasure(2) // measure margins in
    inches
    factory.SetPageRange(false, 1, 3) // need pages from 1 to
    3
    factory.printing.printer = "HP DeskJet 870C"
    factory.printing.copies =
    2
    factory.printing.collate = true
    factory.printing.paperSize =
    "A4"
    factory.printing.paperSource = "Manual feed"
    // -- basic
    features
    factory.printing.header = "This is
    MeadCo"
    factory.printing.footer = "Advanced Printing by
    ScriptX"
    factory.printing.portrait = false
    factory.printing.leftMargin =
    1.0
    factory.printing.topMargin = 1.0
    factory.printing.rightMargin =
    1.0
    factory.printing.bottomMargin =
    1.0
    }
    </script>
    (2)
    <script
    language="javascript">
    function printsetup(){
    //
    打印页面设置
    wb.execwb(8,1);
    }
    function printpreview(){
    //
    打印页面预览

    wb.execwb(7,1);

    }
    function printit()
    {
    if
    (confirm('确定打印吗?'))
    {
    wb.execwb(6,6)
    }
    }
    </script>
    </head>
    <body>
    <OBJECT
    classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"
    height=0 id=wb name=wb
    width=0></OBJECT>
    <input type=button name=button_print
    value="打印"
    onclick="javascript:printit()">
    <input type=button
    name=button_setup
    value="打印页面设置"
    onclick="javascript:printsetup();">
    <input
    type=button name=button_show
    value="打印预览"
    onclick="javascript:printpreview();">
    <input
    type=button name=button_fh
    value="关闭"
    onclick="javascript:window.close();">
    ------------------------------------------------
    关于这个组件还有其他的用法,列举如下:
    WebBrowser.ExecWB(1,1)
    打开
    Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
    Web.ExecWB(4,1)
    保存网页
    Web.ExecWB(6,1) 打印
    Web.ExecWB(7,1) 打印预览
    Web.ExecWB(8,1)
    打印页面设置
    Web.ExecWB(10,1) 查看页面属性
    Web.ExecWB(15,1)
    好像是撤销,有待确认
    Web.ExecWB(17,1) 全选
    Web.ExecWB(22,1) 刷新
    Web.ExecWB(45,1)
    关闭窗体无提示
    2、分页打印
    <HTML>
    <HEAD>
    <STYLE>
    P
    {page-break-after:
    always}
    </STYLE>
    </HEAD>
    <BODY>
    <%while not
    rs.eof%>
    <P><%=rs(0)%></P>
    <%rs.movenext%>
    <%wend%>
    </BODY>
    </HTML>
    3、ASP页面打印时如何去掉页面底部的路径和顶端的页码编号
    (1)ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉,打印就不出来了。
    (2)<HTML>
    <HEAD>
    <TITLE>
    New Document </TITLE>
    <META NAME="Generator"
    CONTENT="EditPlus">
    <META NAME="Author" CONTENT="YC">
    <script
    language="VBScript">
    dim
    hkey_root,hkey_path,hkey_key
    hkey_root="HKEY_CURRENT_USER"
    hkey_path="\Software\Microsoft\Internet
    Explorer\PageSetup"
    '//设置网页打印的页眉页脚为空
    function pagesetup_null()
    on error
    resume next
    Set RegWsh =
    CreateObject("WScript.Shell")
    hkey_key="\header"
    RegWsh.RegWrite
    hkey_root+hkey_path+hkey_key,""
    hkey_key="\footer"
    RegWsh.RegWrite
    hkey_root+hkey_path+hkey_key,""
    end
    function
    '//设置网页打印的页眉页脚为默认值
    function pagesetup_default()
    on error
    resume next
    Set RegWsh =
    CreateObject("WScript.Shell")
    hkey_key="\header"
    RegWsh.RegWrite
    hkey_root+hkey_path+hkey_key,"&w&b页码,&p/&P"
    hkey_key="\footer"
    RegWsh.RegWrite
    hkey_root+hkey_path+hkey_key,"&u&b&d"
    end
    function
    </script>
    </HEAD>
    <BODY>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/>
    <br/><p
    align=center>
    <input type="button" value="清空页码"
    onclick=pagesetup_null()> <input type="button" value="恢复页吗"
    onclick=pagesetup_default()><br/>
    </p>
    </BODY>
    </HTML>
    4、浮动帧打印
    <SCRIPT
    LANGUAGE=javascript>
    function button1_onclick() {
    var
    odoc=windows.iframe1.document;
    var r=odoc.body.createTextRange();
    var
    stxt=r.htmlText;
    alert(stxt)
    var
    pwin=window.open("","print");
    pwin.document.write(stxt);
    pwin.print();
    }
    </SCRIPT>
    4、用FileSystem组件实现WEB应用中的本地特定打印
    <script
    Language=VBScript>
    function print_onclick //打印函数
    dim
    label
    label=document.printinfo.label.value //获得HTML页面的数据
    set
    objfs=CreateObject("Scripting.FileSystemObject") //创建FileSystem组件对象的实例
    set
    objprinter=objfs.CreateTextFile ("LPT1:",true)
    //建立与打印机的连接
    objprinter.Writeline("__________________________________")
    //输出打印的内容
    objprinter.Writeline("| |")
    objprinter.Writeline("|
    您打印的数据是:"&label& " |”)
    objprinter.Writeline("|
    |")
    objprinter.Writeline("|_________________________________|")
    objprinter.close
    //断开与打印机的连接
    set objprinter=nothing
    set objfs=nothing //
    关闭FileSystem组件对象
    end
    function
    </script>
    服务器端脚本:
    <%………
    set
    conn=server.CreateObject ("adodb.connection")
    conn.Open
    "DSN=name;UID=XXXX;PWD=XXXX;"
    set
    rs=server.CreateObject("adodb.recordset")
    rs.Open(“select
    ……”),conn,1,1
    ……….%>
    //与数据库进行交互
    HTML页面编码:
    <HTML>
    ………
    <FORM ID=printinfo
    NAME="printinfo" >
    <INPUT type="button" value="打印>>" id=print
    name=print > //调用打印函数
    <INPUT type=hidden id=text1 name=label
    value=<%=………%>>
    //保存服务器端传来的数据
    ………
    </HTML>
    怎么样在WEB中实现打印分页
    FAQ
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=42641
    page-break-after版本:CSS2 
    兼容性:IE4+ 继承性:无

    语法:

    page-break-after : auto &brvbar; always
    &brvbar; avoid &brvbar; left &brvbar; right &brvbar;
    null

    参数:

    auto :  假如需要在对象之后插入页分割符
    always :
     始终在对象之后插入页分割符
    avoid :  避免在对象后面插入页分割符
    left :
     在对象后面插入页分割符直到它到达一个空白的左页边
    right :  在对象后面插入页分割符直到它到达一个空白的右页边
    null :
     空值。IE5用来取消页分割符设置

    WEB打印大全
    <OBJECT id="WebBrowser" height="0" width="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"
    PHP打印页面VIEWASTEXT
    >
    PHP打印页面
    </OBJECT>
    PHP打印页面
    PHP打印页面然后就可以依次加入功能按钮了:
    PHP打印页面
    PHP打印页面
    <input onclick="document.all.WebBrowser.ExecWB(6,1)" type="button" value="打印"> <input onclick="document.all.WebBrowser.ExecWB(6,6)" type="button" value="直接打印">
    PHP打印页面
    <input onclick="document.all.WebBrowser.ExecWB(8,1)" type="button" value="页面设置">
    PHP打印页面
    <input onclick="document.all.WebBrowser.ExecWB(7,1)" type="button" value="打印预览">&nbsp;<INPUT type="button" value="关闭窗口" onclick="javascript:window.close()">
    PHP打印页面
    PHP打印页面将这两块东西放到
    <center class=noprint></center>就不会打印这些按钮了。当然要定义noprint了:
    PHP打印页面
    PHP打印页面PHP打印页面
    <style media="print">PHP打印页面.Noprint {PHP打印页面}{ DISPLAY: none }</style>只要把不想打印的东西的css设置成noprint就可以了。
    PHP打印页面
    PHP打印页面现在就实现了基本的web打印,需要注意的情况如下:
    PHP打印页面
    PHP打印页面必须将ie的internet选项的安全设置中对于没有标记为安全的ActiveX控件进行PHP打印页面设置成提示或者启用,否则会报错,导致不可用。
    PHP打印页面如果在vs.net编辑环境下编辑该页面,它经常自动的给object添加多余的参数,有了这些东西,打印就会出错,所以要记得最后保存的时候删除它们。
    PHP打印页面为了简便并且达到最好的效果,我们可以在一个页面实现编辑和打印,这时候会需要很多的textbox,我们把它的css设置成.edittext
    PHP打印页面{
    PHP打印页面overflow-y:visible;
    PHP打印页面width: 100%;
    PHP打印页面border-top: none;
    PHP打印页面border-right: none;
    PHP打印页面border-bottom: none;
    PHP打印页面border-left: none;
    PHP打印页面}就可以实现在打印的时候不显示边框和multiline的textbox不显示滚动条了。
    PHP打印页面
    PHP打印页面还有一些小经验就是在设置标格宽度的时候,对于A4纸张,横打用920,竖打用640,效果最好。

    PHP打印页面关于这个组件还有其他的用法,列举如下:
    PHP打印页面WebBrowser.ExecWB(1,1) 打开
    PHP打印页面Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
    PHP打印页面Web.ExecWB(4,1) 保存网页
    PHP打印页面Web.ExecWB(6,1) 打印
    PHP打印页面Web.ExecWB(7,1) 打印预览
    PHP打印页面Web.ExecWB(8,1) 打印页面设置
    PHP打印页面Web.ExecWB(10,1) 查看页面属性
    PHP打印页面Web.ExecWB(15,1) 好像是撤销,有待确认
    PHP打印页面Web.ExecWB(17,1) 全选
    PHP打印页面Web.ExecWB(22,1) 刷新
    PHP打印页面Web.ExecWB(45,1) 关闭窗体无提示

    用WebBrowser组件打印页面内容例子
    <!--
    document.all.WebBrowser.ExecWB(6,6)
    参数例表

    4,1保存网页
    4,2保存网页(对话框)
    6,1直接打印
    6,2直接打印
    7,1打印预览
    7,2打印预览
    8,1选择参数,打印参数设置
    8,2选择参数,打印参数设置

    10,1查看页面属性
    10,2查看页面属性
    17,1全选
    17,2全选
    22,1重新载入当前页
    22,2重新载入当前页
    -->

    <html>
    <head>
    <meta name=vs_targetSchema
    content="http://schemas.microsoft.com/intellisense/ie5">
    <title>***WSOFT.NET***</title>
    <meta
    http-equiv="Content-Type" content="text/html;
    charset=gb2312">
    <!--media=print 这个属性可以在打印时有效-->
    <style
    media=print>
    .NOPRINT{display:none;}
    .PageNext{page-break-after:
    always;}
    </style>
    <style>
    body,td,th
    {
    font-size:
    12px;
    }
    .tdp
    {
          border-bottom: 1
    solid #000000;
          border-left:    1 solid
    #000000;
          border-right:    0 solid
    #ffffff;
          border-top: 0 solid
    #ffffff;
    }
    .tabp
    {
          border-color: #000000;

    border-collapse:collapse;
    }
    .NOPRINT {
    font-family:
    "宋体";
    font-size: 12px;
    }

    </style>

    </head>

    <body >
        <OBJECT    id=WebBrowser    classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2    height=0    width=0
    VIEWASTEXT>
        </OBJECT>
    <input
    type=button value=打印       onclick="document.all.WebBrowser.ExecWB(6,1)" class="NOPRINT">
    <input
    type=button value=直接打印 onclick="document.all.WebBrowser.ExecWB(6,6)"
    class="NOPRINT">
    <input type=button value=页面设置
    onclick="document.all.WebBrowser.ExecWB(8,1)" class="NOPRINT">
    <input
    type=button value=打印预览 onclick="document.all.WebBrowser.ExecWB(7,1)"
    class="NOPRINT">
        <br/>
    <table
    width="90%" border="0" align="center" cellpadding="0"
    cellspacing="0">
        <tr
    align="center">
          <td
    colspan="5"><font
    size="3">北京市人民医院结帐费用报表</font></td>
        </tr>
        <tr>
          <td>汇总人次
    5</td>
          <td>费用合计
    15853.12</td>
          <td>统计日期
    </td>
          <td>制表人
    Super</td>
          <td>制表日期:2005-03-08</td>
        </tr>
    </table>


    <table width="90%" border="1" align="center" cellpadding="2"
    cellspacing="0" bordercolor="#000000"    class="tabp">
        <tr>
          <td     >姓名</td>
          <td     >住院号</td>
          <td     >科室</td>
          <td     >结帐日期</td>
          <td     >出院日期</td>
          <td     >费用合计</td>
          <td     >医保交易费用</td>
          <td     >分类给付费用</td>
          <td     >非医保交易费</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>

        </tr>
        <tr>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>
          <td     >&nbsp;</td>

        </tr>
    </table>
    <hr
    align="center" width="90%" size="1" noshade class="NOPRINT"
    >
    <!--分页-->
    <div class="PageNext"></div>
    <table
    width="90%" border="1" align="center" cellpadding="2" cellspacing="0"
    bordercolor="#000000"    class="tabp">
        <tr>
          <td
    >第2页</td>
        </tr>
        <tr>
          <td
    >看到分页了吧</td>
        </tr>
        <tr>
          <td
    >&nbsp;</td>
        </tr>
        <tr>
          <td
    >&nbsp;</td>
        </tr>
        <tr>
          <td ><table
    width="100%"    border="0" cellspacing="0"
    cellpadding="0">
              <tr>
                <td width="50%"
    >这样的报表
                    对一般的要求就够了。</td>
                <td>&nbsp;</td>
              </tr>
          </table></td>
        </tr>
    </table>
    </body>
    </html>

    简单懂得 HTML
    CSS 即可。
    下面样式只在打印时有用 <style media=print>
    <style
    media=print>
    .Noprint{display:none;}
    .PageNext{page-break-after:
    always;}
    </style>

    WebBrowser 控件对象。只要是 win98 以上版本都有。
    其实配合“分页样式表”,和 HTML表格 一般的打印都可以实现的。

    如果想对 非Windows平台用户使用。
    请去掉下面这些:
    <center class="Noprint"
    >
       <p>
    <!--最主要是这个-->
       <OBJECT   id=WebBrowser   classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2   height=0   width=0>
       </OBJECT>
       <input   type=button   value=打印           onclick=document.all.WebBrowser.ExecWB(6,1)>
       <input   type=button   value=直接打印   onclick=document.all.WebBrowser.ExecWB(6,6)>
       <input   type=button   value=页面设置   onclick=document.all.WebBrowser.ExecWB(8,1)>
    </p>
       <p>     <input   type=button   value=打印预览   onclick=document.all.WebBrowser.ExecWB(7,1)>
         <br/>
         </p>
       <hr align="center" width="90%" size="1"
    noshade>
    </center>

    //也许有些地方大家不太明白我解释一下其实很简单
    。。。。。。。。。。。。。。。。。。
    <!--media=print只有在打印中   有效-->
    <style media=print>

    <!--display:none 隐藏加上,上面的 media=print
    就是在打印时隐藏-->
    .Noprint{display:none;}

    <!--分页-->
    .PageNext{page-break-after: always;}

    </style>

    .......
    <!--网页中分页-->
    <div
    class="PageNext"></div>

    在print控制打印的时候,要控制打印方向可使用:printer.Orientation   =1是横打    printer.Orientation   =2是纵打

     

    来自于:http://blog.sina.com.cn/s/blog_6d4bfb040100ne4i.html



沪ICP备19023445号-2号
友情链接