Flex的分页打印还真是头痛啊,看了Flex的Develope Guide的31章关于打印的内容,有所领悟,如果自己包装一个通用的打印控件,还是很费精力的,想想这种东西,肯定有人做好控件了嘛,嘿嘿,找到了,那就是FlexReport。
试用了下,效果是有的,不过不怎么好用,问题还是一大堆啊!
1. 从SVN上弄下来源码和例子,例子是跑不起来的,ReportDataGrid控件问题,编译通不过,一看源码,傻了吧,ReportDataGrid里面啥都没实现。Google了一把,发现解决方案,把ReportDataGrid替换成PrintDataGrid就能跑起来了。
2. 打印控件需继承Report,内含控件结构有限制,必须如下:
<Report>
<PrintComponent/>
<Body>
<PrintTextArea/>
<PrintDataGrid/>
</Body>
<PrintComponent/>
</Report>
PrintComponent是FlexReport其中一个组件,放在Body之上可以做页眉,放在Body之下可以做页脚,有属性可以选择其显示在首页、尾页、中间页或者所有页;
PrintTextArea也是FlexReport其中一个组件,文本比较长,需要分页时候,用此控件;
PrintTextArea和PrintDataGrid是支持分页的控件,但是必须放在Body的下一层使用,如果在PrintDataGrid之外再套一层vBox之类的,那分页将失效。追究源码,Body在计算分页时,只遍历其首层子控件的validNextPage属性。因此,理论上含有validNextPage属性的控件,都可以放在Body里面使用;
在Body内可以使用其他控件,单只限于放在Body前半部,之后放PrintDataGrid的东东,如果在PrintDataGrid之后放其他控件,分页将失败。
3. 只有页码,没有总页数
目前,只有研究到这个层次了,做个笔记,有空再钻研下源码,改的再通用一点,呵呵