Flex 打印常使用PrintDataGrid,但会有一些问题,不支持表格单元格合并,有的可能需要打印一些flex组件和容器(VBox, HBox, Text, Image)等。重写flex的Grid表格,Grid类似HTML的table, 能很好支持单元格合并,单元格中加入组件和容器。

自定义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 分页预览,分页打印相关推荐

  1. Excel使用记录之分页预览与打印标题

    1.打印多页表格时建议使用分页预览,保证上下页之间连贯 2.设置了冻结首行窗格的,想要将每一页打印的内容都包含这个标题,可以使用打印标题选项

  2. vue-pdf+element实现全屏窗口pdf分页预览,pdf打印实现和解决打印乱码

    一.源码 vue-pdf打印实现和乱码解决https://download.csdn.net/download/lucky_fang/85498529 二.全屏窗口打印预览效果 分页预览pdf 窗口采 ...

  3. VUE 前端PDF分页预览、下载

    一.安装PDF插件依赖 // pdf预览 npm install vue-pdf --save// pdf下载 npm install downloadjs 二.完整示例 <template&g ...

  4. 在线文件/文档预览/分页分片预览 之开源kkfileview(word转pdf,pdf截取,pdf转图片,Aspose jobConverter , OpenOffice ,libreoffice )

    前提说明 浏览器不能直接浏览word文件,但可以浏览pdf文件!!! 可以后台把word,excel 转成成pdf.然后给前端预览: 业界常用的开源工具有:Aspose jobConverter ,  ...

  5. FineReport JS实现分页预览改变鼠标悬停所在的行列的背景色

    一:需求描述 1)鼠标滑过及悬停时改变行的颜色. 2)鼠标滑过及悬停时改变列的颜色. 3)鼠标滑过及悬停时改变同时行和列的颜色. 二:实现思路 鼠标滑入悬停时,先遍历获取该行所有单元格的原背景色,再遍 ...

  6. [财务][数据化分析][帆软]报表设计-分页预览

    [财务][数据化分析][帆软]报表设计-分页预览 1. 概述 分页预览即普通预览模式,FineReport 的默认预览方式,一般在只需要查看报表数据用于分析的时候使用. 下面我们以内置的 Gettin ...

  7. EXCEL分页预览 网格线

    视图--分页预览 工具--选项--视图---网格线 转载于:https://blog.51cto.com/tunder168/720100

  8. 帆软报表获取单元格的值的几种方式,包括分页预览,填报预览,新填报预览

    帆软报表获取单元格的值的方式在分页预览,填报预览,新填报预览都是不同的,没有统一的方式,这给使用者带来一定的不便.现在总结一下. 分页预览: getCellValue: function (cellP ...

  9. 在网页中调用打印预览及打印设置

    在网页中调用打印预览及打印设置 以下内容为程序代码: <OBJECT  id=WB classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 heig ...

最新文章

  1. 翻译java_翻译示例代码
  2. Sun x4500作为文件服务器的调优
  3. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_1
  4. 数据结构Java01【数据结构概述、数组基本使用】
  5. 顺序查找与二分查找算法
  6. Python-类基础
  7. Whats the difference between git reset --mixed, --soft, and --hard?
  8. Linux进程间通信——消息队列
  9. Angular07 利用angular打造管理系统页面
  10. java性能优化权威指南_《Java性能优化权威指南》PDF 下载
  11. Linux下载Mysql
  12. 云科技网络验证源码_APK云科技网络验证-APK一键加网络验证一键加弹窗引流
  13. Ubuntu下使用外置USB无线网卡
  14. html 鼠标形状箭头,CSS各种鼠标样式介绍
  15. 诺基亚、罗永浩,中国手机2014八大关键词
  16. 1553B通信项目开发笔记(四)bu61580程序编写,实现回环之RT端
  17. vue子组件给父组件传值时接收不到数据
  18. 2012意大利之行3:罗马的路和车_我是亲民_新浪博客
  19. Java如何输入一个不知道长度的数组
  20. 开放教育公共事业管理(教育管理)本科综合实践环节实施方案

热门文章

  1. 数据完整性、存储过程、函数
  2. 解决macOS Sierra WI-FI无法连接网络
  3. 想要4个9?本文告诉你监控告警如何做
  4. M-K趋势检验以及突变检验
  5. 中小型运维团队如何设计运维自动化平台
  6. 关于暖茶的所有:微电影《暖茶》介绍篇,美文诗歌篇,小说简介篇
  7. 高级搜索-百度和必应
  8. Linux内核之vmlinux与vmlinuz
  9. 输出一个贷款的迁徙率计算的代码
  10. python怎么pip离线下载_pip下载保存Python包,pip离线安装