`
greatghoul
  • 浏览: 143728 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

利用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的设计器依然可以正常打开,有趣。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics