我们都善于东拼西凑,写最少的代码来达到目的。这次有一个做报表的需要,怎么用我掌握的工具,来解决这个问题。
方案如下。
Web还是用django,django可以解决用户认证的问题。
报表用jasper report,jasper report是很好的报表制作工具,能够生成pdf,html,excel等格式,而且有iReport这个图形界面,最重要的,jasper report是免费的。
Jasper report是java的工具,需要由java来调用,为此又花时间复习了java的语法。
应用由三部分组成
django
一个java工具,使用jasper report的模板生成pdf报表
iReport来制作报表模板
流程是这样
1. 用户使用浏览器访问django的站点,在网页上填写jasper报表需要的参数
2. django接收到post请求,在本地生成一个json数据包,里面包含了jasper 报表运行的所有参数,通过命令行调用java工具,得到一个pdf文件
3. 重定向浏览器到刚刚生成的pdf文件,用户在浏览器里面看到结果,这时用户可以打印报表
下面介绍django和java的接口。
Django生成一个json文件,用django自带的simplejson包就可以,生成的文件如下。
{
"jdbc_url": "jdbc:postgresql://localhost/vod?user=postgres&password=postgres",
"params": {"artist_id": "%陈%"},
"jasper": "D:/djangoapp/vodweb/media\\jasper\\classic_vod.jasper",
"pdf_file": "D:/djangoapp/vodweb/media\\pdf\\4a376ac0-6514-11dd-9490-005056c00008.pdf"
}
其中,
jdbc_url是java需要的jdbc配置,当然我们也可以把用哪一种jdbc驱动也作为参数,这样更通用。
Jasper是jasper report模板的路径。
pdf_file是输出pdf的文件名,django接下来要重定向的所在。
Param是jasper report模板需要的参数,会原封不动地传给jasper report。
接收这个json文件作为输入的java工具,是一个通用的工具
唯一的输入参数是json文件的路径
1. 解析json文件,得到jdbc_url,构造一个数据库连接对象
2. 解析params参数,构造对应的hash_map
3. 调用 Jasper report,生成pdf文件,调用的时候需要jasper模板的路径和输出的pdf文件名
附,命令行的一个sample
java -Djava.class.path="D:\djangoapp\vodweb\vod\appserver" -Djava.ext.dirs="D:\PROGRA~1\JASPER~1\IREPOR~1.0\lib" HelloWorld D:/djangoapp/vodweb/media\pdf\6592d8a1-6775-11dd-b59d-005056c00008.json