基于Xml的Web打印解决方案

Web打印是开发B/S系统无法回避的问题,这个问题往往客户很难理解为什么这么难,但是确实是开发人员心中的痛。当前Web打印的实现方式有好多种,归纳一下:

1.导出Execel,并且利用Excel的打印功能来实现

2.直接调用Web浏览器的打印方法进行页面区域的打印

3.采用第三方的打印控件进行打印

应该来讲,第一种和第二种方式实现都相对比较简单,而往往也是大量报表打印的解决方案。但是缺陷也很明显,对于那些需要精确控制打印位置,批量打印,交互式打印效果却不是很理想。第三种方式可以避免上面的问题,但是往往需要ActiveX控件的支持,所以也存在一定的缺陷。

我们开发的这个项目中有需要打印证件的需求,是使用的针式打印机,刚开始采用了第一种方法,客户对于这种方案不满意,所以我们就开发了一个ActiveX控件来进行证件打印。

1、需求概述 

系统在页面中列出所有需要打印证件的人员信息,用户选择其中的一个或者几个进行打印。每个打印完成后,将打印完成标记填写到数据库中去。 

2、实现的基本思路

基于以上的需求,我们最终的解决思路如下:

a) 利用asp.net 的 WebMethord 从服务器提取人员信息

b) 将人员信息转化为打印XML文本,并且传递给客户端的ActiveX控件

c) 客户端的控件将接收的XML内容发送到打印机 

所以这里面比较关键的有几个内容:

a) 在服务器端生成的XML文本的格式是怎样的。(XML文本中关键内容非常简单,页面是如何设置的?打印的内容是什么,这个内容打印到页面的什么位置!)

b) ActiveX控件如何取得服务器端生成的XML文本。 (由于传入的是XML文本,所以只需要这个控件能够解释XML文本就可以了,具体什么语言无所谓)

3、关键代码

我生成的xml文本的格式如下:

 

Code

我们的需求中只有文本的打印,所以我这边都是用TextObject标签来实现了,如果您想打印线条或者图片等,再加上相关的支持就可以了。

<Page>标签是指每页包含的内容。

<TextObject>标签是指打印的文本,其中的TextBrush是刷子的定义,Text是指打印出的内容,Font对应的是打印字体,xy就是打印的坐标了。

这样看一下,大家就基本明白了打印XML的内容,接下来就要编写一个ActiveX控件了,这个控件的功能非常简单,只需要能够解释XML文本,并且将文本输出到指定的打印机就可以了。

 

Code

 

大家看一下,也是非常简单的几段代码。

最后一块内容就是如何调用的问题了,我们通过js调用WebMethod生成XML文本,并且将XML文本传递给ActiveX控件就一切OK了。

 

 

Code

 

posted on 2009-07-13 18:11  香帅  阅读(1673)  评论(0)    收藏  举报

导航