关于Web应用程序中打印的实践和思考——我的Web开发心得

号外:我打开了久违的CSDN博客,看看我上次写文章的时间居然是2007年某天,那时我的关注重心还在SEO、台湾、Sport等上,一晃眼就已经是2009年了。真是(一系列感叹或无病呻吟之语)啊。


好了,之所以决定重新启用博客,也是因为最近实在憋得不行,白天在工作中想法很多很多,都是草草的在笔记本记了几笔,总是觉得应该把每天的心得都记录下来,等整个项目完了,也能够积累了一整套的经验和教训,故决定从今日起把在项目中遇到的心得写下来。为自己也为其它有需要的朋友提供一个窗口。


今日的主题肯定是关于Web应用程序中的打印。


应用情景

项目是一个平台中子项目供应链管理系统,本系统中有订单打印功能,如果是单纯打印,可能相信每个人都会使用如果代码来完成。

  1. window.print()

完成这个代码不是问题。问题是,由于是一个通用系统,开始是将订单格式设置为同一个格式,可是随着用户的使用很快暴露出问题,不同的客户需要不同的格式,比如有的要显示价格,有的不需要,有的需要添加一些空的行,以便于客户能够在线下填写一些必要信息。


这样的需求不得不对Web打印造成挑战,具体又如下问题:


1.如果增加行,很有可能会超过默认的A4大小

2.如果不修改IE或者Firefox等浏览器默认的打印设置在很多情况下无法满足要求

3.很多打印相关的操作和设置极有可能被浏览器拦截,比如设置等(浏览器真是麻烦)


针对这些问题,设计了采用XML模板来设计解决不同客户订单格式不一样的需求,也就是数据源是相同,中间通过XML来定义单头,列,单尾等信息。

至于页面设置,设置准备采用IE的WebBrowser内置组件进行页面设置和打印预览。


问题si


但是实际上远远没有那么简单,因为在行业用户,用户的计算机水平实在不能高估,因为WebBrowser进行页面设置和打印预览的代码是输入被浏览器拦截的内容,需要用户手动点一下允许才行,所以这个地方就有可能是用户的最大障碍。还记得上周就是因为打印的问题,十个客户九个客户都说点了没反应而没法使用(其实是弹出窗口被拦截,虽然在整个项目中全部是使用DIV模拟弹出窗口,但是由于打印的实现等问题,开发人员还是做成window.open弹窗,所以预料之中的出了问题)


对于这个问题我想单纯用技术很难解决,因为web应用程序本身的限制。所以暂时打算通过对客户的培训来解决这个问题,虽然很麻烦,但暂时也只是么办了。


附上通过WebBrowser打印和页面设置的代码:

  1. <OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>   
  2. <input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打开>  
  3. <input name=Button onClick=document.all.WebBrowser.ExecWB(2,1) type=button value=关闭所有>  
  4. <input name=Button onClick=document.all.WebBrowser.ExecWB(4,1) type=button value=另存为>   
  5. <input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value=打印>  
  6. <input name=Button onClick=document.all.WebBrowser.ExecWB(6,6) type=button value=直接打印>  
  7. <input name=Button onClick=document.all.WebBrowser.ExecWB(7,1) type=button value=打印预览>  
  8. <input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value=页面设置>  
  9. <input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value=属性>  
  10. <input name=Button onClick=document.all.WebBrowser.ExecWB(17,1) type=button value=全选>  
  11. <input name=Button onClick=document.all.WebBrowser.ExecWB(22,1) type=button value=刷新>  
  12. <input name=Button onClick=document.all.WebBrowser.ExecWB(45,1) type=button value=关闭> 

附加的内容


刚才找上面这段代码的时候还在http://ltc603.javaeye.com/blog/123191找了另外一种办法:

使用ScriptX.cab控件,据该作者说此方法不错,我还没试过。试试再说。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值