`
fatherican
  • 浏览: 48487 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

flex打印系列教程二使用PrintDataGrid打印多页内容

 
阅读更多

转载地址:http://bbs.9ria.com/viewthread.php?tid=69835

在上一篇教程中,我们知道了如何使用flex自带的打印类-FlexPrintJob。它很容易使用。但是你在打印多页内容时可能无法达到预期的效果,原因如下:
为了开始打印,你需要写如下代码
printJob.addObject(targetComponent);
在这句里,你将你的组件加到FlexPrintJob里面,但是你到底要打印多少页呢?
最明显的例子是DataGrid.它可能有1到1000条记录。没有什么办法能让我们预先确定一个动态绑定数据源的大小.,再加上我们不知道在哪里将打印的页面分隔,就行1-17条记录在第一页,18-30条记录在第二页等等 。
幸运的是,flex为你提供了一个解决DataGrid打印问题的方法。方法如下:
你需要的flex类
•mx.printing.FlexPrintJob
•mx.printing.PrintDataGrid
操作步骤:
1. 创建一个FlexPrintJob实例
var flexPrintJob: FlexPrintJob = new FlexPrintJob();
2.启动FlexPrintJob
flexPrintJob.start();
3. 创建一个PrintDataGrid

  1. var myPrintData:PrintDataGrid = new PrintDataGrid();
  2. Application.application.addChild(myPrintData);
复制代码
4. 依据DataGrid设置PrintDataGrid的 DataProvider, Width, and Height
myPrintData.dataProvider = myData.dataProvider;
myPrintData.width = printJob.pageWidth;
myPrintData.height = printJob.pageHeight;
5. 循环PrintDataGrid来生成打印的多个页面
printJob.addObject(myPrintData);
while (myPrintData.validNextPage) {
myPrintData.nextPage();
printJob.addObject(myPrintData);
}
6. 打印
printJob.send();

例子代码:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
  3. <mx:Script>
  4. <![CDATA[
  5. import mx.printing.PrintDataGrid;
  6. import mx.printing.FlexPrintJob;
  7. import mx.collections.ArrayCollection;

  8. [Bindable]
  9. public var dataSource:ArrayCollection=new ArrayCollection();

  10. private var totalRecords:Number=100;

  11. private function init():void
  12. {
  13. for(var i:int=1; i <= totalRecords; i++)
  14. {
  15. var dataObject:Object=new Object();
  16. dataObject.Name="Name #" + i;
  17. dataObject.Phone="Phone #" + i;
  18. dataObject.Address="Address #" + i;
  19. dataSource.addItem(dataObject);
  20. }
  21. }

  22. private function doPrint():void
  23. {
  24. var printJob:FlexPrintJob=new FlexPrintJob();
  25. if (printJob.start())
  26. {
  27. var myPrintData:PrintDataGrid=new PrintDataGrid();
  28. Application.application.addChild(myPrintData);
  29. myPrintData.dataProvider=myData.dataProvider;
  30. myPrintData.width=printJob.pageWidth;
  31. myPrintData.height=printJob.pageHeight;

  32. printJob.addObject(myPrintData);
  33. while(myPrintData.validNextPage)
  34. {
  35. myPrintData.nextPage();
  36. printJob.addObject(myPrintData);
  37. }
  38. Application.application.removeChild(myPrintData);

  39. printJob.send();
  40. }
  41. }
  42. ]]>
  43. </mx:Script>
  44. <mx:Panel title="Flex Tutorial - PrintDataGrid" width="500" height="500" horizontalCenter="0" verticalCenter="0" horizontalAlign="center" verticalAlign="middle">
  45. <mx:DataGrid id="myData" dataProvider="{dataSource}" width="400" height="400"/>
  46. <mx:Button label="Print" click="doPrint()"/>
  47. </mx:Panel>
  48. </mx:Application>
复制代码
结论:
AdobeFlex provides PrintDataGrid 是为了解决多个页面的打印问题的.如果你的应用程序差不多只包含一个大的DataGrid的话,它工作良好。
但是,生活往往难如人愿,很多时候,你的应用程序是很多容器和组件(Canvas, VBox, HBox, Label, Text, Text Area, Image,DataGrid)的结合体。 不幸的是,即使到flex3,Adobe也没有拿出一个比FlexPrintJob 和PrintDataGrid更好的打印方法。

那么,有没有任何第三方的解决方案?我已经做了很多研究,最终找到了一个开源项目。这就有了了我们的下一个教程 - 使用FlexReport打印多页。

分享到:
评论

相关推荐

    FlexReport打印

    多页内容:专门用于打印的组件只有PrintDataGrid。 打印预览:正如我刚才说的,各个组织需要打印功能,但他们也不希望浪费纸张。使用PrintJob是无法实现打印预览的。没有人希望打印了100页表格之后,才发现打印了...

    printDataGrid.js

    easyui快速打印datagrid内容,通过创建容纳所需要的打印内容(需要打印的表格通过方法组装成字符串放入DIV中),然后调用window.print打印;具体步骤如下:1.html页面需要有专门的DIV用于输出Dialog 2.在html页面...

    DataGridView打印控件5.3版

    12、删除了PrintDataGrid函数(若要打印DataGrid,请先调用ConvertDataGridToDGV函数将DataGrid转换为DataGridView再以打印DGV的形式打印)和ChartGraph图表组件(图表打印请使用功能更强大且不依赖Excel的Chartlet...

    c#可以打印datagridview的类

    可以打印datagridview的类 调用方法: PrintDataGridView printDataGrid = new PrintDataGridView(); printDataGrid.PrintDatagridView(dataGridView1, true);

    vb.net如何打印dataGridview中的数据

    参照:http://www.codeproject.com/KB/grid/PrintDataGrid_CS.aspx

    jeasyui的dataGrid的打印和导出,jeasyui报表 table转成excel 实例下载

    --//打印--&gt; function CreateFormPage(strPrintName, printDatagrid) { var tableString = '&lt;div&gt;&lt;table width="100%"&gt;;"&gt;; font-weight:bold;"&gt;;"&gt; 年;"&gt; 半年广东省房屋市政工程安全生产文明施工示范工地申报...

    实现easyui的datagrid导出为excel的示例代码

    之前有介绍过如何实现easyui里datagrid内容的打印,今天给大家介绍下如何实现datagrid内容导出为excel文件。以下为代码实现: export.js function ChangeToTable(printDatagrid) { var tableString = '...

Global site tag (gtag.js) - Google Analytics