Java web 打印方案---数飞OA打印方案总结

 

Web系统中,打印功能一直是个老大难问题,因此产生了很多第三方的控件,多数要收费,而且跟自己的系统结合有一定的麻烦。数飞OA系统采用J2EE技术,jsp打印问题同样存在于OA中。

在数飞OA中,打印方式有三种:一是不经过任何修改,直接调用javascript中的window.print()打印。二根据客户要求的报表格式,编写相应格式的html,装载数据打印,同样调用window.print()打印,只是对html的格式要求比较高。三是通过客户提供的word格式,通过xml配置文件与数据库的数据进行关联,自动装载数据到word中打印,这里是利用客户端的word进行打印。 

第一种几乎不用编写程序,最简单快捷,这里会遇到几个问题,只能打印表单内容,按钮不希望打印出来;页眉页脚不想打印出来;IEtitile不想打印出来。

解决办法:把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都有边框,tdtd的交接处就会有线条重叠,虽然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年1月1日

主 送:市场部;办公室;财务部;人事部

拟稿单位领导签字:同意办理[admin,2009-01-01 00:57]

核稿人签字:同意[admin,2009-01-01 02:57]

 

完成此方案后,有几个特点:打印格式由现有的word格式提供,不需要再花时间开发调试程序;实施人员只需要花一点时间就完成标签和XML文件的设置;在报表中自动加入审批意见,领导印章等,直观跟现实一致;打印的格式和效果完全由word决定,而word强大并且被大众而熟悉,在打印的时候可以调整,所见即所得!

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

转载于:https://www.cnblogs.com/soarwell/archive/2009/04/01/1427052.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java使用com.lowagie.text.pdf插件编写的PDF报表工具类,支持动态报表创建,使用简单,附件包含了测试类和生成的报表文件。附件的代码需要修改相关的保存路径后可以直接使用。创建一张报表例子: private JsFileExportResult createRowReport() { String condition = "开始时间:2018-02-02 14:00:30 结束时间:2018-02-06 16:00:30"; PDFGridReport pdfReport = new PDFGridReport("报表创建测试", GridReportTestModel.getModels()); pdfReport.addCondition(condition); pdfReport.header("字段名称1", "item1", 0, 0).width(160); pdfReport.header("字段名称3", "item3", 0, 2).getCell().backgroundColor(Color.ORANGE); pdfReport.header("字段名称4", "item4", 0, 3); pdfReport.header("字段名称5", "item5", 0, 4); pdfReport.header("字段名称2", "item2", 0, 1); pdfReport.header("值", "value", 0, 5).alignH(HAlign.ALIGN_CENTER).getCell().alignH(HAlign.ALIGN_RIGHT); pdfReport.header("时间", "time", 0, 6); pdfReport.header("图片", "image", 0, 7).width(60).alignH(HAlign.ALIGN_CENTER).getCell() .alignH(HAlign.ALIGN_CENTER).alignV(VAlign.ALIGN_MIDDLE); // 横向打印 pdfReport.getPageSetting().setPrintHorizontal(); pdfReport.group("item1").childGroup("item2"); pdfReport.setCellFormat(new PDFCellValueFormat() { @Override public String format(String fieldName, String oriValue) { if ("value".equals(fieldName)) { return String.format("%.2f", Double.parseDouble(oriValue)).toString(); } else { return oriValue; } } }); JsFileExportResult fileResult = pdfReport.createReport(); return fileResult; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值