java 实现套打报表_用DevExpress.XtraReports实现复杂报表套打的一些经验

我觉得首先需要了解打印的一些常识和DevExpress.XtraReports的打印逻辑:

1、PageHeader和PageFooter高度是固定的,Detail高度是变的,所以嵌套的数据源一般放到Detail中;

2、报表的分页按照两个原则:首先最外层的是根据Report的数据源的RowChanged,内层是根据数据源的每个Row的填充结果,如果数据填满整个页还没打印完,就会分页打印到下一页;

然后就说一下套打。套打比较麻烦的是单据内数据的定位,假如有N张报表,每张报表上又需要N个控件,通过打印测试比对修改的方式肯定行不通,在XtraReports中可以通过加背景图片的方式定位控件,分几个步骤:

1、将所有单据报表按1:1扫描;

2、在一张空的报表中拖入一个XRPictureBox控件,设置控件的Image属性为任一张报表图片,设置Sizing属性为ZoomImage,并将控件占满整个报表;

3、打印测试比对,直到打印出的图片和实际单据完全一致,通过图片的长宽属性和XRPictureBox控件的长宽属性计算出比值;

4、将3中计算出的比值应用到其他报表扫描图片上,再将图片作为报表背景定位各个数据控件的位置。

下面举一个我做的单据中一个比较复杂一点的例子,如下图:

c999604648ad2d28aaaf563663734c68.png

这张单据的难点首先是存在两个高度不确定的部分:“托运人提供详细情况”和“运费与附加费”。这两部分的数据分别存在单独的表中,记录数不定。对于这种情况,为了使整体结构清晰,我一般把不确定的部分放到SubReport中。我尝试放了两个SubReport,然而XtraReports的打印逻辑是先打印完上面的SubReport然后才打印下面的SubReport,和单据情况不符,失败。(不知这种情况谁有比较好的解决方案)问题无法解决,我又分析了一下需求,问了客户的情况,了解到”运费与附加费”记录数很少,一般两三条,最多也不会到引起分页的地步,我调整了一下,把下面的SubReport改为包含6个Row的固定高度的XtrTable,并将“集装箱数或件数合计”一下全部并入PageFooter,问题一解决。

不久客户说红框框中的部分放一个主表的字段,是一个多行文本,且print per page,所以红框框中这部分不能放在SubReport中了,放在外面,因为在Report中SubReport没有Left属性(SubReport都是从Report的最左边开始打印),SubReport也不能用了,最后只好放了一个XtrTable,只包含一个Row,然后根据记录数在BeforePrint事件中动态添加Row。到这里整张单据基本完成了。

对于报表打印接触了解的还少,很多地方可能走了弯路,请大家不吝赐教。

https://www.cnblogs.com/end/category/82543.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值