公司最近放弃了购买FineReport报表的计划,改而使用中创的InforReport报表,昨天尝试了下将InforReport嵌入到J2EE应用中,其间出现了许多莫名其妙的错误,不过最后还是搞定了。
可惜的是,以前在FineReport上花了那么多功夫,如果换到InforReport,都得重新来过,粗略看了下InforReport的模板文件(IPR),一堆看不懂数字和字符
写道
...
...
cm9wIGtleT0iMTgsMyIgY29kZVR5cGU9IkVBTjEzIiBzaG93RGF0YT0iWUVTIiBkaXJlY3Rpb249
IjAiPg0KCQk8L2JhcmNvZGVwcm9wPg0KDQoJCTwvYmFyY29kZXByb3BiYXNlPg0KCTxzdWJtaXNz
aW9uIFVSTD0iIj4NCjwvc3VibWlzc2lvbj4NCjwvaW5mb3JyZXBvcnQ+DQo=
...
cm9wIGtleT0iMTgsMyIgY29kZVR5cGU9IkVBTjEzIiBzaG93RGF0YT0iWUVTIiBkaXJlY3Rpb249
IjAiPg0KCQk8L2JhcmNvZGVwcm9wPg0KDQoJCTwvYmFyY29kZXByb3BiYXNlPg0KCTxzdWJtaXNz
aW9uIFVSTD0iIj4NCjwvc3VibWlzc2lvbj4NCjwvaW5mb3JyZXBvcnQ+DQo=
看到最后的那个等号,我突然想到了迅雷地址,迅雷采用了base64编码,于是我尝试将ipr文件通过base64解码看看,果然是xml文件,这样了解了xml的组成结构,就有可能不通过设计器动态生成一些报表了。
解码嘛,因为整理书签时刚好看到《可爱的Python》的链接,于是就用python来写:
def decode_ipr(filename):
try:
ipr_file = open(filename, 'r')
xml_file = open(re.sub(r'.ipr$', '.xml', filename), 'w')
print 'decoding: %s ==> %s' % (filename, xml_file.name)
base64.decode(ipr_file, xml_file)
ipr_file.close()
xml_file.close()
except IOError:
print 'error decoding file %s' % filename
解码的例子已经打包,解压附件,直接运行decode.py即可。
令人费解的是,中创为何要把xml格式进行编码呢,文件反弄得大了不少,保护模板文件的真实内容?这种程序的保护也太低级了些吧。
如果你将解码后的xml文件后缀改成ipr,用InforReport的设计器依然可以正常打开,有趣。