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

来源:互联网 发布:rcd510密码破解淘宝 编辑:程序博客网 时间:2024/05/29 13:34

号外:我打开了久违的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控件,据该作者说此方法不错,我还没试过。试试再说。




原创粉丝点击