使用webBrowser控件进行无需选择打印机直接打印

以前做的一个系统(内部小型局域网,在线售票系统),采用的是基于浏览器的打印方式,客户提出在每次打印时都必须选择一次打印机,即在调用window.print()的时候弹出选择打印机的界面,这样很费时间,能不能去掉。

后来在网上找了一些控件,比较有名的就是scriptx这个控件,它可以实现打印控制,包括控制边距,选择页数等。的确很不错,不过很可惜,这个控件是收费的,而且破解版根本就找不到,要不就是已经失效了。估计内部使用了基于联网的方式进行认证。
而且该控件提供的免费版中,方法factory.printing.print(false)基本起不到预期的作用,本来想不弹出选择界面,结果还是不能幸免。于是放弃寻找破解版的念头,寻找其他的控件吧。

后台终于找到可以使用windows自带的webBrowrser进行操作了,因为笔者的需求很简单,不需要控制打印选项这些,就是想直接使用默认的打印机,不弹出打印选择界面而已。OK,以下是实现代码,很简单的(主要是后面有一些限制)//界面上

<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>

//javascript
		var PrintCommand = document.getElementById("PrintCommandObject");
			 PrintCommandObject.ExecWB(6, 2);//这里使用的是6,2参数,有的说6,6,笔者测试不通过

继续阅读“使用webBrowser控件进行无需选择打印机直接打印”

使用jsp extends而不是sitemesh分离jsp减少相同代码

    随着互联网应用的兴起,对基于布局技术的应用越来越多,许多情况下,都是采用copy+paste的开发模式来进行每一张jsp的开发。当然,再先进一点的,则是使用include的方式来包装每一张界面。
    对于每一张界面,都有相同的东西。比如,经常使用的header,footer,以及一个body界面最基本的布局元素。在开发前期,这些信息基本由web开发师来确定,然后每一张界面进行copy,并填充不同的东西,然后由程序开发人员来根据效果图或基本的html界面写动态数据,并最终形成产品项目。

    然而,这种解决方式还是不算简洁,对于已经存在的html。开发人员不再需要在界面上增加信息,而如果要新加一个功能,那么开发人员就需要首先从已经存在的界面上copy一份,然后修改其中需要变动的地方。
    到后来,如果出于某种变动(如设计上的调整),则需要在涉及到的相关界面都需要增加或修改一部分代码,这种情况下,以前copy+paste的代码就很麻烦了。开发人员必须找到每一张需要调整的界面,并在其中修改代码。
    我们说,重复的代码不写第二遍,那么在jsp上这么多的重复代码,应该怎么作呢。答案就是使用布局技术,首先有一个基本的布局界面,每张功能界面都引用这个布局界面,而只需要写当前功能界面所关注的功能,最后所生成的界面就是布局界面+功能界面的综合体了。
    使用过wordpress博客的人都了解,每个界面实际上都差不多,而负责前端所有展现的界面也就只有那么几个,这就是布局界面的应用。

    首先,作为开发人员,符合条件的布局技术必须满足两个条件,一个是掌握难度低,使用难度低,二是要简洁,不要大而全,解决最基本的功能即可。那么,就按照这两个需要来寻找吧。
    在google上搜索一番,涉及到最常用的布局技术有两个:sitemesh和struts tiles。其中,struts tiles从struts1时代起就存在了,就是为了解决界面布局的问题。然后由于它基于配置,且过于灵活,导致使用难度过大且不太不容易被掌握;所以逐渐转移到sitemesh上来。
    sitemesh当前最新的版本为2.4.2(官网上的版本为2.4.1)。网上有很多介绍它的应用,这里就不再介绍了,想使用的人可以google。它的主页为:http://www.opensymphony.com/sitemesh/。然而,最后的一次更新也在2009年3月,且最新的版本2.4.2也并没有在官网的下载中出现。寻找了半天,才发现sitemesh的代码库也不换地址了,最新的地址为https://github.com/sitemesh。而且,仔细看了下,好像基本处于停止的状态,且sitemesh也开始往sitemesh 3迁移了。代码基本上重新构建。对于使用和学习也不太方便。
    从笔者的角度上,主要关注于使用和技术应用,简单地查看了相应的源代码,实现功能确实过于复杂了一些,基本上是基于界面流过滤器的思想来进行文本的解析和替换。并且,相当的功能对于笔者所在的应用来说,基本上用不着。并且,还考虑到一个灵活应用的考虑,最主要的应用还是一个减少代码量,统一布局的目的。如果某一个功能jsp和模板界面相差太多,就直接使用原始的jsp,而不再使用sitemesh,在这一点上sitemesh就需要去修改配置文件,对于在开发上容易健忘的我们这一点实在要求太高。
    因此,最终笔者想要的就是一种可以类似界面替换的功能,以避免使用include指令时,大量的copy+paste操作。而不是想要增强jsp的应用。如果,某些界面又不使用这种功能时,又可以即时切换到原始的jsp上来。直接无迁移成本。而最后发现提供这种功能的东西就是:jsp extends。

继续阅读“使用jsp extends而不是sitemesh分离jsp减少相同代码”