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

最近要求用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值