在工作中有用到Jaspersoft iReport打印组件打印PDF文档的情况,但是有时候做好的模板文件部署到服务器(本地或者远程),打印时会引起内存溢出的问题,这个时候检查方向分两条线:1)打印设值的问题 2)模板元素的问题。
首先1)打印设值的问题,要检查模板对应的字段在设值类里是否为空,是否有无限循环的可能,是否有重名,2)模板元素的问题,这个需要检查元素的属性的详细设置,比如我遇到的下面这种情况:
被保险人银行客户编号与投保人银行客户编号两个元素框挨的比较近,因为设置属性的时候考虑到被保险人银行客户编号这个值的不确定性,所以把这个元素框的属性设置为Print When Detail Overflows=true(打钩),而且Stretch With Overflow=true(打钩)
本来这样考虑也合情理,当元素内容超长时,元素框肯定显示不下,只能显示出框内的部分,所以设置超长的内容也打印出来,同时为了美观将元素框设置自动延展包容超长的内容。
Print When Detail Overflows这个设置为true倒也没有什么,顶多就是内容有可能与其他文字重叠了,但是Stretch With Overflow设置为true则会带来一个隐藏的风险,就是元素框自适应内容的超长而延展后,有可能它的定位坐标X,Y的起始位置延伸到其他元素框内部去了,原则上在同一个层面每个元素框的坐标起点与长宽限定的范围内只能表达一个元素,如果在同一层面有其他元素框的起点和边长在另一个已知元素的内部,那么在当元素框的边长设置为固定值的时候这两个元素都能显示出来,只是可能内容有重叠的部分,但是当设置元素边框Stretch With Ov