关闭

关于birt实现“盖章”的解决方案

563人阅读 评论(0) 收藏 举报

最近要求用birt导出PDF,这个很简单,/run?__report==*.rptdesign&__format=pdf&attachment=true 此链接直接实现点击导出PDF,但是又要求实现一个效果,就是类似在报表页面上加个“印章”,忙了一天,终于搞定了,记录解决办法在这里。

解决的过程如下:
1 本来是尝试用javascript来改变图片标签的位置,简单的说,就是把图片标签看做一个DIV,然后让它悬浮在需要的地方。但是失败,根本原因在于:birt所提供的javascript脚本,并不是真正运行在客户端,而是运行在服务器端,所以document对象,window对象根本没法使用,此路不通。(当然,在图表中是有运行在客户端的javascript脚本,但是我考虑了一下,发现没什么作用)这个方案放弃。
2 在某些容器控件的属性中,有一个overFlow属性,就如同英文意思一样:如果内容太多,图片太大,它将会允许内容或者图片超出指定的单元格显示,这就给我实现这个功能提供了一个方法,举例说明,A B 为两个控件,A为图片控件,在一个Grid里,B为其他控件,在GRID外,两个控件排列如下:
   A
   B
A在B的上方,如果这个时候,把GRID的overflow属性改成true,高度改成接近0,那么就A里面的图片就会“溢出”,自动覆盖到B的位置上,B就被“盖”到了A图片的下方,如果正好图片是透明的格式(如GIF),看起来,就和印章一样了。
       这种办法可以解决在HTML下的显示,但是很遗憾,问题没有完全被解决,因为在PDF下,依然不行,我查了一下,大概原因是birt调用的第三方的jar包生成的,所以生成的时候显示有可能会不一样。问题似乎陷入了绝境。但是一个偶然的机会(机会和这个问题无关,不再详细说明),我发现了第三方jar包的一个特点,或者说是BUG,这个bug可以作为第三种解决的办法:
3 利用第三方jar包的bug,实现图片的“溢出” 。 什么情况下,图片会“溢出”呢? 我举例说明:
   a1 a2
   b1 b2
   c1 c2
以上,a 和b都属于一个GRID,C属于另一个,两个GRID上下排列,如果这个时候,把a2和b2合并单元格,然后把图片放进去,就造成了:左边的行数比右边多 的情况,PDF在这种情况下,会造成2列里的图片“溢出”!

以上为解决办法,简单的说:有两种
    一 如果只是HTML的话,就可以利用overflow属性来让图片“溢出”,达到控件内容层叠的效果。
    二 如果是要PDF的话,就可以利用PDF第三方jar包的BUG让图片“溢出”,达到控件内容层叠的效果。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10255次
    • 积分:210
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类