今天一大早,甲方BB说我去一趟办公室,开门见山,X工呀,由于实际业务需求,还需要增加点小功能,具体如下:

         甲方BB:第1呢,需要实现在BS系统中进行相关证件和文书的打印工作;

         我:行。

         甲方BB:第2呢,打印需要满足市面上的所有主流浏览器;

         我:行。

         甲方BB:第3呢,打印要容易开发和快速上手,不对现有系统造成过度侵入,不影响现有系统使用;

          我:好。

          甲方BB正要继续说下去,电话响了:XX@##%$@$,一通电话后,X工呀,我临时需要参加个会议,我长话短说,最后呢,也是最重要的一点,现在国产化是个趋势,你这的打印必须兼容国产化电脑呀!

        我:好吧。

        话刚送出嘴唇,就听到“吱牛”一声门关上了,留下了我。。。。

 等等,好像有什么地方不对劲呀,我再瞅瞅我说的话,啊!原来连起来是“行 行 好 吧”!

     不是吧,什么时候成了G帮帮Z了。。。。

java调用模板打印wrod java打印模版_控件

 

 

需求就是命令,于是我一顿操作梦如虎,开始在网上进行了地毯式搜索,咦!原来打印插件还是蛮多的嘛,顿时来了精神

java调用模板打印wrod java打印模版_控件_02

     按照小学语文老师教的议论文“三板斧”,提出问题---分析问题---解决问题的套路,下面给大家介绍一下。

     第一板斧甲方BB说过了,我就不再啰嗦,省得出现如下画面。

java调用模板打印wrod java打印模版_java调用模板打印wrod_03

      第二板斧:分析,其实需求核心总结就是,在主流浏览器上实现打印,不影响现有系统,开发容易上手快,可最后兼容国产化机器原来没搞过,是个大雷呀!

java调用模板打印wrod java打印模版_java调用模板打印wrod_04

   于是我开始抓耳挠腮,认真比对搜索到的向个打印控件。。。

java调用模板打印wrod java打印模版_数据_05

     jatoolsPrinter打印控件,Lodop打印控件,墙外打印控件,Grid++ Report等等,真是不搜不知道,一搜吓一跳,打印插件还真不少呢?   

     但黑山老妖手里的雷怎么扑灭呢?支持国产化UOS统信操作系统的浏览器由:360安全浏览器、火狐浏览器、谷歌浏览器、QQ浏览器,但有一条,只要是是操作内核不变,全部不能使用插件,因为插件在LIUNX下是不被支持的!

java调用模板打印wrod java打印模版_控件_06

     国产化的UOS统信操作系统,龙哥必然要大力支持的!既然不能直接使用插件,那 中间加一层如何呢?有句行话说得好"没有加一层解决不了的"!JDBC不也是在各种数据库驱动的基础之上加了一层吗?

      嘿嘿,果然思路决定出路,虽然 jatoolsPrinter打印控件,Lodop打印控件,墙外打印控件,Grid++ Report看上去一堆,但经过这个雷过滤之后,适合我自己项目的就只有Grid++ Report了,因为他不仅有客户端打印插件,还有服务器端打印支持,这不就是我想要加的一层吗??真是“柳暗花明又一村”呀(别的插件可能也很不错,但是龙哥没有用过,也不过多发表评论与对比)。

     Grid++ Report简单了解一下:

   官网地址是http://www.rubylong.cn,“源自2003年,只专注报表软件”,“开发最佳报表工具,提高报表开发效率”,锐浪软件一直致力于报表软件领域,我们不仅为软件开发者提供最专业的报表开发工具,也为各行各业的现有软件系统提供定制的商业智能分析、报表软件、打印软件,充分挖掘数据的价值!

     先看看第一个例子长啥 样:

java调用模板打印wrod java打印模版_封装_07

    打印表格的效果,右上角有一个水印,但只在预览进显示,实际打印进并没有,所有功能都不设限制,而不是像有些一样,中出钱只能用阉GE过的。作为一个国内企业来说,真的是很有人情味了!

   

    再来分析一下打印模板,这是一个GRF文件,用官方的开发设计器打开打印模板看下长什么样子:

java调用模板打印wrod java打印模版_封装_08

像word一样,有页眉,页脚,中间通过“明细网格”自动实现数据循环展示。

java调用模板打印wrod java打印模版_数据_09

报表模板里面通过配置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,这对于开发人员基本没有一点障碍,可谓“容易开发和快速上手”,这样一个最简单的打印就可以了。

     下面再来看一个我们常用的套打功能,以官方的发票套打为例,简单分析一下,先来看一下效果图。

java调用模板打印wrod java打印模版_控件_10

分析模板开始,

java调用模板打印wrod java打印模版_java调用模板打印wrod_11

预览时看到的发票图片,其实是在模板里面设置了一个扫描的彩色底图,只不过上面没有数据而已。然后设置在打印预览进可见,实际打印时不打印,这样就实现的把数据打印在了真实的发票上。

java调用模板打印wrod java打印模版_控件_12

     这是他扫描后在模板里面的设置的发票底图,可以帮助我们更直观的理解模板的制作原量。

     再来看下这个套打的数据



{
"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出来,这样不就摆脱了不能用插件的困扰了吗?这就是我上面说的“加一层”。

      什么还是不太明白,这样吧,龙哥好人做到底,已经对这个思路做了封装,并进行开源,还是劳烦大人您亲自过目吧,