Flex 分页预览,分页打印
2016-09-13 20:25
134 查看
Flex 打印常使用PrintDataGrid,但会有一些问题,不支持表格单元格合并,有的可能需要打印一些flex组件和容器(VBox, HBox, Text, Image)等。重写flex的Grid表格,Grid类似HTML的table, 能很好支持单元格合并,单元格中加入组件和容器。
自定义PrintDataGrid:
Adobe对于多页打印或打印预览都没有提供一个很好的解决办法,但可以根据Grid中GridRow的height,计算自动拆分表格,将一个大的Grid拆分每一个页面一个Grid,进行分页预览和打印。大概的算法:根据每页的height值计算一个页面能存放多少Grid的GridRow,超过的拆分到下一个页面,如果需要拆分的单元格存在被合并的情况,也就是GridItem
中RowSpan > 1, 则需要将一个GridItem,分为两个GridItem,而这两个的GridItem的rowSpan之和为原来的GridItem的RowSpan。
合并单元格拆分:
原文出处:http://www.anyrt.com/blog/list/201609131739.html
自定义PrintDataGrid:
public class PrintDataGrid extends Grid { public static const pageHeight:int = 1023; private var _realWidth:int; public function PrintDataGrid() { this.horizontalScrollPolicy = ScrollPolicy.OFF; this.verticalScrollPolicy = ScrollPolicy.OFF; super(); } public function addGridRow(gridRow:RowGrid):void { addCells(gridRow.getAvailableCell(), gridRow.height); } private function addCells(cells:Array, height:Number):void { var gridRow:GridRow = new GridRow(); for each(var cell:GridCell in cells) { gridRow.addChild(cell); } gridRow.height = height; this.addChild(gridRow); } public function get realWidth():int { return _realWidth; } public function set realWidth(value:int):void { _realWidth = value; } }
Adobe对于多页打印或打印预览都没有提供一个很好的解决办法,但可以根据Grid中GridRow的height,计算自动拆分表格,将一个大的Grid拆分每一个页面一个Grid,进行分页预览和打印。大概的算法:根据每页的height值计算一个页面能存放多少Grid的GridRow,超过的拆分到下一个页面,如果需要拆分的单元格存在被合并的情况,也就是GridItem
中RowSpan > 1, 则需要将一个GridItem,分为两个GridItem,而这两个的GridItem的rowSpan之和为原来的GridItem的RowSpan。
合并单元格拆分:
public function splitRowSpan(gridCellArray:GridCellArray):void { if(cells.length == 0) { return; } for(var i:int = 0; i < cells.length; i++) { var gridCell:GridCell = cells[i] as GridCell; if(gridCell == null) { continue; } var splitCell:GridCell = null; if (gridCell.isRemove) { splitCell = gridCell.mergerCell; } if (splitCell == null) { continue; } if (gridCell.rNum == splitCell.rNum) { continue; } var orgRowSpan:int = splitCell.rowSpan; var extRowSpan:int = gridCell.rNum - splitCell.rNum; var content:DisplayObject = splitCell.getChildAt(0); var topCellHeight:Number = getExtRowSpanHeight(splitCell.rNum, splitCell.rNum + extRowSpan, gridCellArray); var bottomCellHeight:Number = getExtRowSpanHeight(splitCell.rNum + extRowSpan, splitCell.rNum + splitCell.rowSpan, gridCellArray); splitCell.rowSpan = extRowSpan; splitCell.height = topCellHeight; if(topCellHeight < bottomCellHeight) { splitCell.removeAllChildren(); } var bottomCell:GridCell = splitCell.newGridCell(); bottomCell.rowSpan = orgRowSpan - extRowSpan; bottomCell.colSpan = splitCell.colSpan; bottomCell.height = bottomCellHeight; bottomCell.rNum = gridCell.rNum; bottomCell.cNum = gridCell.cNum; if(topCellHeight < bottomCellHeight) { bottomCell.addChild(content); } var gridRow:RowGrid = gridCellArray.getRowGrid(gridCell.rNum); gridRow.setCell(bottomCell, bottomCell.cNum); if (bottomCell.rowSpan > 1 || bottomCell.colSpan > 1) { gridCellArray.mergerGridCell(bottomCell); } } }
原文出处:http://www.anyrt.com/blog/list/201609131739.html
相关文章推荐
- Flex 分页预览,分页打印
- [Asp.net]使用flexpaper+swftools大文件分页转换实现在线预览
- 分页组件(引用Super Flex文章)
- 在Flex下实现数据分页控件
- 文件预览及服务配置(openoffice+swftools+flexpaper)
- flex 分页功能参考
- flex 分页
- Flex 4 List Data Paging(Flex 4 List控件分页功能的实现)
- java实现在线预览功能 swftools+flexPaper
- Openoffice+swfTools+flexPaper实现在线预览
- 网页打印问题,打印设置,打印预览,打印分页,纵打,横打及页面的边距
- 一步步打造漂亮的新闻列表(无刷新分页、内容预览)(2)
- 去除分页预览
- 一步步打造漂亮的新闻列表(无刷新分页、内容预览)第三章
- flex-分页控件
- Flex 分页 组件 源码
- flex图片剪切示例--预览、保存到本地、保存到服务器(附源码)
- Flex:上传图片前预览
- JS页面打印,预览,设置,分页
- ArcGIS 指定行列 批量打印 分页预览 打印预览,电话:18987281928