欢迎交流WEB打印心得!

解决方案 »

  1.   

    如果客户没有什么太高的要求呢,就直接解析web页面,用jxl打印到excel如果一定要报表,我们公司从明宇公司买了一套报表,用起来还可以
      

  2.   

    我也正在琢磨这事呢,打算用JDK1.4里自己的Print方法,不知道好不好使,顺便在这里问一下,怎么样把从数据库中得到的数据保存成为.XLS或.TXT格式的文件,然后再打印呢?
      

  3.   

    请参考http://www.fcsoft.com.cn有问题请加[email protected]
      

  4.   

    报表速度慢
    最好是先以EXCEL 导出 
    再打印
      

  5.   

    利用脚本控制打印,可以采用如下方法:
    1、execCommand()方法
    Print 打开打印对话框以便用户可以打印当前页
    即document.execCommand('Print');2、window.print()3、  <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)>
      <input  type=button  value=打印预览  onclick=document.all.WebBrowser.ExecWB(7,1)>
      

  6.   

    楼上说的不错。
    还有就是用JasperReport生成个PDF给用户吧。
      

  7.   

    用JasperReport不错
    或者用ScriptX.cab也很好操作的
      

  8.   

    <%@ page contentType="application/vnd.ms-excel;charset=GBK"  %>
    <%@ page language="java" 
    import="java.sql.*,java.util.*,
    java.io.*,com.loulou.mssql.*,com.loulou.page.*,
    javax.servlet.ServletRequest,
    javax.servlet.http.HttpServletRequest,
    javax.servlet.http.HttpServletResponse"
    %><jsp:useBean id="pc" scope="page" class="com.loulou.page.PageControl"/>
    <jsp:useBean id="sq" scope="page" class="com.loulou.mssql.SQLUtil"/>
    <jsp:useBean id="rsa" scope="page" class="com.loulou.mssql.RSUtil"/><head>
    <meta http-equiv="Content-Type" content="application/vnd.ms-excel; charset=gb2312">
    </head>
    <body><table border="1">
    <%

    String ip=request.getParameter("ip");
    String dbName=request.getParameter("dbName");
    String dbPot=request.getParameter("dbPot");
    String userName=request.getParameter("userName");
    String userPw=request.getParameter("userPw");

    int pageSize,cpage;
    String ps = request.getParameter("pgSz");
    String pg = request.getParameter("curPage");

    String pgAll="";
    if(pg==null)
    pgAll="all";
    else
    pgAll=pg;

    String tbName=request.getParameter("tbname");
    String tbid = request.getParameter("tbid");
    if(tbName==null||tbName.trim().equals("")||tbid==null||tbid.trim().equals("")||ip==null||dbName==null||dbPot==null||userName==null||userPw==null)
    {

    out.println("alert('无法获取表信息,请重新选择表!');");
    out.println("window.close();");
    }
    else
    {
    response.addHeader("Content-Disposition","filename="+tbName+"-"+pgAll+".xls");
    if(ps==null)
    pageSize=65534;
    else
    pageSize = java.lang.Integer.parseInt(ps);
    if(pg==null)
    cpage=1;
    else
    cpage = java.lang.Integer.parseInt(pg);
    MsSQLAction dba = new MsSQLAction(ip,dbName,dbPot,userName,userPw);
    MsSQLAction dba1 = new MsSQLAction(ip,dbName,dbPot,userName,userPw);
    int rows = 0,cols = 0;
    String[] tbcols = null;
    try
    {
    String sql="select * from "+tbName;
    ResultSet rs = dba.ExecQuery(sql);
    String[][] tb=rsa.getRecordArray(rs,pageSize,cpage);
    if(tb!=null)
    {
    rows = tb.length;
    cols = tb[0].length;
    tbcols=new String[cols-1];
    String sql1 = "select colname,colcomment from user_cols where tbid='"+tbid+"' order by colid";
    ResultSet rs1 = dba1.ExecQuery(sql1);
    String[][] tbNmCols = rsa.getRecordArray(rs1);
    if(tbNmCols!=null)
    tbcols = rsa.getTHeadStr(tb[0],tbNmCols);
    else
    for(int ii=0;ii<cols-1;ii++)
    tbcols[ii] = tb[0][ii];
    }
    else
    {
    %>
    <tr>
    <td>查询打印数据错误</td>
    </tr>
    <%
    }
    %>  
    <tr>
    <%
    for(int i1=0;i1<cols-1;i1++)
    {
    %>  
    <td bgColor="#A79FCD" align="center"><%=tbcols[i1]%></td>
    <%
    }
    %>  
    </tr>
    <%
    for(int i=4;i<rows;i++)
    {
    %>  
    <tr>
    <%
    for(int j=0;j<cols-1;j++)
    {
    %>  
    <td><%=tb[i][j]%></td>
    <%  
    }
    %>  
    </tr>
    <%
    }
    }catch(Exception ex)
    {
    ex.printStackTrace();
    }
    finally
    {
    dba.CloseAll();
    dba1.CloseAll();
    }
    }
    %></table></body>
      

  9.   

    用JasperReport + IReport,如果要漂亮的就生成PDF的,但是要求客户端安装PDF软件,如果要求不高就生成HTML,打印出来的虽然没有PDF那么漂亮但是至少客户那边也说得过去,比自己写的HTML页面打印出来漂亮多了。
      

  10.   

    eprint自定义打印是一个页面套打工具.它直接在IE浏览器中可视化的设计各种复杂的打印模版,
    能够解决在IE浏览器中打印各种复杂的中国式报表及票据。详见: http://218.30.103.110:8080/eprint/index.htm
    方成eform自定义表单平台,纯BS结构.100%开放源码.可以在 http://218.30.103.110:8080/eform/index.html 在线试用.    webprint是一个基于表格的页面打印解决方案.先将要打印的数据及样式组织
    到一个HTML的TABLE元素中, 然后将这个TABLE元素传给webprint,实现分页打印预
    览,出打印对话框打印和直接打印。
      

  11.   

    document.execCommand("print")配套css: page-break-before/after
      

  12.   

    <html>
    <head>
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
    <title>看看</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>
    .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 #000000 #000000 #000000;
        border-style: solid;
        border-top-width: 2px;
        border-right-width: 2px;
        border-bottom-width: 1px;
        border-left-width: 1px;
    }
    .NOPRINT {
     font-family: "宋体";
     font-size: 9pt;
    }</style></head><body >
    <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><table width="100%" border="0" align="center" cellpadding="2" cellspacing="0"  class="tabp">
      <tr bgcolor="#990066"> 
        <td colspan="3" class="tdp">第1页</td>
        </tr>
     <tr>
       <td width="29%" class="tdp">&nbsp;</td>
       <td width="28%" class="tdp">&nbsp;</td>
          <td width="43%" class="tdp">&nbsp;</td>
      </tr>
     <tr>
       <td colspan="3" class="tdp">&nbsp;</td>
      </tr>
     <tr>
       <td colspan="3" class="tdp"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="50%" class="tdp">
              </td>
              <td>&nbsp;</td>
            </tr>
          </table></td>
      </tr>
    </table>
    <hr align="center" width="90%" size="1" noshade class="NOPRINT" >
    <!--分页-->
    <div class="PageNext"></div>
    <table width="90%" border="0" align="center" cellpadding="2" cellspacing="0"  class="tabp">
      <tr>
        <td class="tdp">第2页</td>
      </tr>
      <tr>
        <td class="tdp">看到分页了吧</td>
      </tr>
      <tr>
        <td class="tdp">&nbsp;</td>
      </tr>
      <tr>
        <td class="tdp">&nbsp;</td>
      </tr>
      <tr>
        <td class="tdp"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="50%" class="tdp"><p>这样的报表</p>
                  <p>对一般的要求就够了。</p></td>
              <td>&nbsp;</td>
            </tr>
        </table></td>
      </tr>
    </table>
    <hr align="center" width="90%" size="1" noshade class="NOPRINT" >
    <div class="PageNext"></div>
    <table width="90%" border="0" align="center" cellpadding="2" cellspacing="0"  class="tabp">
      <tr>
        <td class="tdp">第3页</td>
      </tr>
      <tr>
        <td class="tdp">看到分页了吧</td>
      </tr>
      <tr>
        <td class="tdp">&nbsp;</td>
      </tr>
      <tr>
        <td class="tdp">&nbsp;</td>
      </tr>
      <tr>
        <td class="tdp"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td width="50%" class="tdp"><p>这样的报表</p>
                  <p>对一般的要求就够了。</p></td>
              <td>&nbsp;</td>
            </tr>
        </table></td>
      </tr>
    </table>
    </body>
    </html>
      

  13.   

    打印控件 virtual printer
      

  14.   

    f1book控件不错,excel模板,和它说那个格子放什么内容就可以了.