今天一大早,甲方BB说我去一趟办公室,开门见山,X工呀,由于实际业务需求,还需要增加点小功能,具体如下:
甲方BB:第1呢,需要实现在BS系统中进行相关证件和文书的打印工作;
我:行。
甲方BB:第2呢,打印需要满足市面上的所有主流浏览器;
我:行。
甲方BB:第3呢,打印要容易开发和快速上手,不对现有系统造成过度侵入,不影响现有系统使用;
我:好。
甲方BB正要继续说下去,电话响了:XX@##%$@$,一通电话后,X工呀,我临时需要参加个会议,我长话短说,最后呢,也是最重要的一点,现在国产化是个趋势,你这的打印必须兼容国产化电脑呀!
我:好吧。
话刚送出嘴唇,就听到“吱牛”一声门关上了,留下了我。。。。
等等,好像有什么地方不对劲呀,我再瞅瞅我说的话,啊!原来连起来是“行 行 好 吧”!
不是吧,什么时候成了G帮帮Z了。。。。
需求就是命令,于是我一顿操作梦如虎,开始在网上进行了地毯式搜索,咦!原来打印插件还是蛮多的嘛,顿时来了精神
按照小学语文老师教的议论文“三板斧”,提出问题---分析问题---解决问题的套路,下面给大家介绍一下。
第一板斧甲方BB说过了,我就不再啰嗦,省得出现如下画面。
第二板斧:分析,其实需求核心总结就是,在主流浏览器上实现打印,不影响现有系统,开发容易上手快,可最后兼容国产化机器原来没搞过,是个大雷呀!
于是我开始抓耳挠腮,认真比对搜索到的向个打印控件。。。
jatoolsPrinter打印控件,Lodop打印控件,墙外打印控件,Grid++ Report等等,真是不搜不知道,一搜吓一跳,打印插件还真不少呢?
但黑山老妖手里的雷怎么扑灭呢?支持国产化UOS统信操作系统的浏览器由:360安全浏览器、火狐浏览器、谷歌浏览器、QQ浏览器,但有一条,只要是是操作内核不变,全部不能使用插件,因为插件在LIUNX下是不被支持的!
国产化的UOS统信操作系统,龙哥必然要大力支持的!既然不能直接使用插件,那 中间加一层如何呢?有句行话说得好"没有加一层解决不了的"!JDBC不也是在各种数据库驱动的基础之上加了一层吗?
嘿嘿,果然思路决定出路,虽然 jatoolsPrinter打印控件,Lodop打印控件,墙外打印控件,Grid++ Report看上去一堆,但经过这个雷过滤之后,适合我自己项目的就只有Grid++ Report了,因为他不仅有客户端打印插件,还有服务器端打印支持,这不就是我想要加的一层吗??真是“柳暗花明又一村”呀(别的插件可能也很不错,但是龙哥没有用过,也不过多发表评论与对比)。
Grid++ Report简单了解一下:
官网地址是http://www.rubylong.cn,“源自2003年,只专注报表软件”,“开发最佳报表工具,提高报表开发效率”,锐浪软件一直致力于报表软件领域,我们不仅为软件开发者提供最专业的报表开发工具,也为各行各业的现有软件系统提供定制的商业智能分析、报表软件、打印软件,充分挖掘数据的价值!
先看看第一个例子长啥 样:
打印表格的效果,右上角有一个水印,但只在预览进显示,实际打印进并没有,所有功能都不设限制,而不是像有些一样,中出钱只能用阉GE过的。作为一个国内企业来说,真的是很有人情味了!
再来分析一下打印模板,这是一个GRF文件,用官方的开发设计器打开打印模板看下长什么样子:
像word一样,有页眉,页脚,中间通过“明细网格”自动实现数据循环展示。
报表模板里面通过配置SQL语句连接ACCESS数据库,直接出的数据。
报表数据格式:
{
"Table": [{
"CustomerID": "HUNGC",
"CompanyName": "五金机械",
"ContactName": "苏先生",
"ContactTitle": "销售代表",
"Address": "德昌路甲 29 号",
"City": "大连",
"Region": "东北",
"PostalCode": "564576",
"Country": "中国",
"Phone": "(053) 5556874",
"Fax": "(053) 5552376"
},
{
"CustomerID": "CENTC",
"CompanyName": "三捷实业",
"ContactName": "王先生",
"ContactTitle": "市场经理",
"Address": "英雄山路 84 号",
"City": "大连",
"Region": "东北",
"PostalCode": "130083",
"Country": "中国",
"Phone": "(061) 15553392",
"Fax": "(061) 15557293"
},
]
}
也是我们常见的json,这对于开发人员基本没有一点障碍,可谓“容易开发和快速上手”,这样一个最简单的打印就可以了。
下面再来看一个我们常用的套打功能,以官方的发票套打为例,简单分析一下,先来看一下效果图。
分析模板开始,
预览时看到的发票图片,其实是在模板里面设置了一个扫描的彩色底图,只不过上面没有数据而已。然后设置在打印预览进可见,实际打印时不打印,这样就实现的把数据打印在了真实的发票上。
这是他扫描后在模板里面的设置的发票底图,可以帮助我们更直观的理解模板的制作原量。
再来看下这个套打的数据
{
"Detail":[
{"ProductID":2,"ProductName":"牛奶","UnitPrice":15.2,"Quantity":20,"Amount":304},
{"ProductID":16,"ProductName":"饼干","UnitPrice":13.9,"Quantity":35,"Amount":486.5},
{"ProductID":36,"ProductName":"鱿鱼","UnitPrice":15.2,"Quantity":25,"Amount":380},
{"ProductID":59,"ProductName":"苏澳奶酪","UnitPrice":44,"Quantity":30,"Amount":1320}
],
"Master":[
{"OrderID":10255,"CustomerId":"RICSU","CompanyName":"永大企业","Address":"港务口街 29 号","OrderDate":"1996/7/12 0:00:00","Remark":"余小姐(089) 7034214"}
]
}
哇,还是我们最喜爱的JSON
问题分析完了,下面应该进行总结问题了吧。Wait a moment!!你的兼容国产化系统打印还没给甲方88实现呢??
我去,高兴早了,这样吧,我介绍一下思路:通过Grid Report的服务器,把我们制作好的GRF模板,和模板所需要的JSON数据传过我们的后台应用程序,我们后台应用程序再调用Grid Report锐浪报表服务器端(官方已经提供C#版本和JAVA版本),他就会自动把模板和数据合成,返回给我们一个PDF出来,这样不就摆脱了不能用插件的困扰了吗?这就是我上面说的“加一层”。
什么还是不太明白,这样吧,龙哥好人做到底,已经对这个思路做了封装,并进行开源,还是劳烦大人您亲自过目吧,