shirobert 发表于 2017-5-5 11:29:24

利用python解码中创报表InforReport的模板文件

  公司最近放弃了购买FineReport报表的计划,改而使用中创的InforReport报表,昨天尝试了下将InforReport嵌入到J2EE应用中,其间出现了许多莫名其妙的错误,不过最后还是搞定了。
  可惜的是,以前在FineReport上花了那么多功夫,如果换到InforReport,都得重新来过,粗略看了下InforReport的模板文件(IPR),一堆看不懂数字和字符

 写道

...
...
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的设计器依然可以正常打开,有趣。
页: [1]
查看完整版本: 利用python解码中创报表InforReport的模板文件