免费OA分享地址,可以了解下:http://blog.tianya.cn/blogger/post_show.asp?idWriter=0&Key=0&BlogID=3015439&PostID=25341549
Web 系统中,打印功能一直是个老大难问题,因此产生了很多第三方的控件,多数要收费,而且跟自己的系统结合有一定的麻烦。在数飞OA系统中 采用 J2EE 技术, jsp 打印问题同样存在于 OA 中。
在数飞 OA 中打印方式有三种:一是不经过任何修改,直接调用 javascript 中的 window.print() 打印。二根据客户要求的报表格式,编写相应格式的 html ,装载数据打印,同样调用 window.print() 打印,只是对 html 的格式要求比较高。三是通过客户提供的 word 格式,通过 xml 配置文件与数据库的数据进行关联,自动装载数据到 word 中打印,这里是利用客户端的 word 进行打印。
 
第一种几乎不用编写程序,最简单快捷,这里会遇到几个问题,只能打印表单内容,按钮不希望打印出来;页眉页脚不想打印出来; IE titile 不想打印出来。
解决办法:把 button 放在一个 table 或者 div 里,打印的时候隐藏,完成后显示就可以。数飞 OA 系统中的 javascript 打印代码如下:
  function Print() {
    var tit = document.title;
   
    document.title = "";
    table1.style.display = "none";
   
    window.print();
   
    document.title = tit;
    table1.style.display = ""; 
}    
不过只能起到打印的目的,打印的效果一般比较土。不管怎么说,可以最快的让系统的大部分模块都有打印的功能。
 
  第二种方式必须根据每个报表的格式进行定制html和java程序开发,会花比较多的时间。要注意的是对html中table的样式控制,在IE中浏览看起来很细的边框,打印出来有些线条会比较粗,有些线条又会比较细,阴阳怪气的很难看。
table 中直接用bordercolor会让线条显得很粗,用bordercolorlight,bordercolordark配合使用可以显示出秀气的线条。
  
table border="1" bordercolorlight="red" 
      bordercolordark="#FFFFFF" cellpadding="3" cellspacing="0"
  tr
    td 姓名 /td〉〈td 所属部门 /td
  /tr
  tr
    td /td〉〈td 技术部 /td
  /tr
/table 
比如以上代码,在 IE 中看起来线条一样大小,还是比较秀气。不要高兴的太早,打印出来的效果不象在 IE 中看到的那样,边框虽细,内线却很粗!原因是每个 td 都有边框, td td 的交接处就会有线条重叠,虽然 IE 看起来没有,可是打印的时候就会显示出来。
这个问题的解决办法是控制每一个 td 的样式,对重叠的地方进行 border-bottom:1px 之类的控制。
这个方案比较消耗精力,而且打印的时候很难控制分页,更不能随时按照客户的需要调整字体边框颜色等。
 
第三种方案利用 word 强大的排版、打印功能,把排版和打印的需求扔到 word 中, OA 软件要做的仅仅是让数据导到 word 中去。 JAVA 读取 WORD 模板,通过 XML 读取相关的数据库数据,自动转载数据到 WORD 模板中,最终展现给客户打印的是 WORD
通常,客户的报表都有 word 格式,或政务 OA 中的红头文件,或院校 OA 中的奖学金格式,大家习惯用 word 制定。在数飞 OA 中,客户提供的 word 格式中,制定标签,并且通过 XML 配置文件,把标签跟数据库的内容结合,达到自动装载数据又能保持原有 word 模板格式的效果。
  发文审批单 
 
  题: [SZGW_FWXX2-XXBT]
日期: [SZGW_FWXX2-XXRQ]
  送: [SZGW_FWXX2-XXZS]
拟稿单位领导签字盖章: [QZ-SZGW-NGDWLD]
核稿人签字: [QZ-SZGW-NGR]
 
上面发文审批单是政府单位在使用时候,交到 OA 中,由实施人员加入 [SZGW_FWXX2-XXBT] 等标签。并且相应的配置XML文件:
block name="GW" table="SZGW_FWXX2" cond="XXID="
tag name="[SZGW_FWXX2-XXBT]" field="XXBT" mutil="false" desc=" 标题 "/
tag name="[SZGW_FWXX2-XXRQ]" field="XXRQ" mutil="false" desc=" 日期 "/
/block
block name="QZ"
tag name="[QZ-SZGW-NGDWLD]" step=" 拟稿单位领导 "/
   tag name="[QZ-SZGW-NGR]" step=" 核稿人 "/
/block
   
至此完成打印单的设置,在需要打印的时候,系统自动生成 word 格式的打印单:
 
发文审批单 
 
  题: 关于数飞OA实施报告
日期: 2009 11
  送: 市场部;办公室;财务部;人事部
拟稿单位领导签字: 同意办理 [admin,2009-01-01 00:57]
Java web 红头文件打印方案之协同OA_第1张图片
核稿人签字: 确认收到 [admin,2009-01-01 02:57]
Java web 红头文件打印方案之协同OA_第2张图片
 
完成此方案后,有几个特点:打印格式由现有的 word 格式提供,不需要再花时间开发调试程序;实施人员只需要花一点时间就完成标签和 XML 文件的设置;在报表中自动加入审批意见,领导印章等,直观跟现实一致;打印的格式和效果完全由 word 决定,而 word 强大并且被大众而熟悉,在打印的时候可以调整,所见即所得!

   
小结:这几种方案不仅仅应用于 OA 的打印,任何 web 系统 CRM ERP HR 等打印都可以处理。而且也不仅仅是 java 打印、 jsp 打印,用 PHP ASP 等语言开发的 WEB 打印也一样适用。这几种打印方案在数飞 OA 中广泛应用,特别是第三种,有效解决了政务 OA 的红头文件,此文仅做思路的总结,具体实现方法有很多。