贴一个自己用Flex写的系统里的打印模块

    注册了这个博客,自己却很少些写东西。也许自己变得有些惰吧!不说这么多了,反正自己也想开始养成写博客的习惯。虽然我写程序的历史也不长,但多少也算是写了些小程序。先把我用Flex 3.0写的一个小系统供初学者参考一下吧!希望对大家有所帮助.
    先贴出打印模块:


       MXML文件PrintConfig.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" close="closeWin();" 
  3.     layout="absolute" width="800" height="486" creationComplete="initWin();" 
  4.     showCloseButton="true" title="打印设置" fontSize="12">
  5. <mx:Script source="../model/PrintConfig.as"/>
  6.     <mx:Tile id="chkContent" paddingLeft="15" paddingTop="10" borderStyle="solid" 
  7.         right="10" bottom="47" height="131" left="10">
  8.         <mx:CheckBox click="chkBox(1,event);" label="姓名" selected="true"/>
  9.         <mx:CheckBox click="chkBox(2,event);" label="工作单位" selected="true"/>
  10.         <mx:CheckBox click="chkBox(3,event);" label="部门" selected="true"/>
  11.         <mx:CheckBox click="chkBox(4,event);" label="职务" selected="true"/>
  12.         <mx:CheckBox click="chkBox(6,event);" label="单位电话" selected="true"/>
  13.         <mx:CheckBox click="chkBox(7,event);" label="单位地址" selected="true"/>
  14.         <mx:CheckBox click="chkBox(8,event);" label="邮编" selected="true"/>
  15.         <mx:CheckBox click="chkBox(9,event);" label="传真号码"/>
  16.         <mx:CheckBox click="chkBox(10,event);" label="移动电话"/>
  17.         <mx:CheckBox click="chkBox(11,event);" label="邮箱" />
  18.     </mx:Tile>
  19.     <mx:DataGrid dropEnabled="true"
  20.         dragMoveEnabled="true"
  21.         dragOver="dragOverHandler(event);"
  22.         dragDrop="dragDropHandler(event);" 
  23.         id="printgrid" right="10" left="10" top="10" bottom="186" toolTip="您可以将要打印的内容拖放在这里,默认为移动拖放,按Ctrl为复制拖放">
  24.     </mx:DataGrid>
  25.     <mx:Button label="打印" click="doPrint();" icon="@Embed(source='../icons/print.png')" right="86" bottom="10"/>
  26.     <mx:Button label="删除" click="deleteItem();" left="10" bottom="10" icon="@Embed(source='../icons/Delete.png')"/>
  27.     <mx:Button x="90" y="410" label="全部添加" icon="@Embed(source='../icons/Package.png')" click="fillAllRecord();"/>
  28.     <mx:NumericStepper left="263" bottom="10" minimum="6" maximum="36" value="12" id="printFontSize"/>
  29.     <mx:Button label="关闭" click="closeWin();" right="10" bottom="10"/>
  30.     <mx:Label text="字体大小:" left="197" bottom="10"/>
  31.     
  32. </mx:TitleWindow>
        ActionScript:PrintConfig.as
  1. import flash.events.Event;
  2. import mx.collections.ArrayCollection;
  3. import mx.controls.dataGridClasses.DataGridColumn;
  4. import mx.events.DragEvent;
  5. import mx.managers.DragManager;
  6. import mx.managers.PopUpManager;
  7. import mx.printing.*;
  8. import mx.controls.Alert;
  9. import mycontrols.FormPrintView;
  10. [Bindable]
  11. public var dgProvider:ArrayCollection;
  12. public var footerHeight:Number = 20;
  13. public var prodIndex:Number;
  14. public var prodTotal:Number = 0;
  15. public var headercls:Array = [
  16.             { headerText:"姓名",dataField:"Client_NameCol",visu:true},
  17.             { headerText:"工作单位",dataField:"Client_CorpCol",visu:true},
  18.             { headerText:"部门",dataField:"Client_DeptCol",visu:true},
  19.             { headerText:"职务",dataField:"Client_JobCol",visu:true},
  20.             { headerText:"单位电话",dataField:"Office_TelCol",visu:true},
  21.             { headerText:"单位地址",dataField:"Office_AddrCol",visu:true},
  22.             { headerText:"邮编",dataField:"Post_CodeCol",visu:true},
  23.             { headerText:"传真号码",dataField:"Office_FaxCol",visu:false},
  24.             { headerText:"移动电话",dataField:"MobileCol",visu:false},
  25.             { headerText:"邮箱",dataField:"EmailCol",visu:false}
  26.             ];
  27. //初始化窗口         
  28. private function initWin():void
  29. {
  30.     var temp:Array =[];
  31.     for(var i:Number=0;i<headercls.length;i++)   //初始化DataGrid控件的Header
  32.     {
  33.         if(headercls[i].visu){
  34.             var cols:DataGridColumn = new DataGridColumn();
  35.             cols.headerText = headercls[i].headerText;
  36.             cols.dataField = headercls[i].dataField;
  37.             temp.push(cols);
  38.         }else{
  39.             continue;
  40.         }
  41.     }
  42.     printgrid.columns = temp;
  43. }
  44. //关闭弹出窗口,PopUpManager管理弹出窗口类
  45. public function closeWin():void
  46. {
  47.     PopUpManager.removePopUp(this);
  48. }
  49. public function chkBox(i:Number,e:Event):void
  50. {
  51.     headercls[i].visu = e.currentTarget.selected;
  52.     
  53.     var temp:Array =[];
  54.     for(var i:Number=0;i<headercls.length;i++)
  55.     {
  56.         if(headercls[i].visu){
  57.             var cols:DataGridColumn = new DataGridColumn();
  58.             cols.headerText = headercls[i].headerText;
  59.             cols.dataField = headercls[i].dataField;
  60.             temp.push(cols);
  61.         }else{
  62.             continue;
  63.         }
  64.     }
  65.     printgrid.columns = temp;
  66.     //printgrid.initialize();
  67. }
  68. //发送数据至打印表格进行打印
  69.  public function doPrint():void {
  70. var printJob:FlexPrintJob = new FlexPrintJob();
  71. if (printJob.start()) {
  72.     
  73.     var thePrintView:FormPrintView = new FormPrintView();
  74.     
  75.     thePrintView.setStyle("fontSize",printFontSize.value);
  76.     
  77.    this.addChild(thePrintView);
  78.     thePrintView.myDataGrid.columns = printgrid.columns;
  79.     thePrintView.width=printJob.pageWidth;
  80.     thePrintView.height=printJob.pageHeight;
  81.     thePrintView.prodTotal = prodTotal;
  82.     
  83.     thePrintView.myDataGrid.dataProvider = printgrid.dataProvider;
  84.    
  85.     thePrintView.showPage("single");
  86.     
  87.     if(!thePrintView.myDataGrid.validNextPage)
  88.     {
  89.         printJob.addObject(thePrintView);
  90.     }
  91.     
  92.     else
  93.     {
  94.         
  95.         thePrintView.showPage("first");
  96.         printJob.addObject(thePrintView);
  97.         thePrintView.pageNumber++;
  98.         
  99.         while(true)
  100.         {
  101.             
  102.             thePrintView.myDataGrid.nextPage();
  103.             thePrintView.showPage("last");
  104.             
  105.             
  106.             if(!thePrintView.myDataGrid.validNextPage)
  107.             {
  108.                 printJob.addObject(thePrintView);
  109.                 break;
  110.             }
  111.             else
  112.             {
  113.                 thePrintView.showPage("middle");
  114.                 printJob.addObject(thePrintView);
  115.                 thePrintView.pageNumber++;
  116.             }
  117.         }
  118.     }
  119.     this.removeChild(thePrintView);
  120. }
  121. printJob.send();
  122. }
  123. //拖放数据至列表中处理
  124.  private function dragOverHandler(event:DragEvent):void {
  125.                         
  126.     event.preventDefault();
  127.     
  128.     event.currentTarget.hideDropFeedback(event);
  129.     
  130.     if (event.dragSource.hasFormat("items"))
  131.     {
  132.     
  133.         event.currentTarget.setStyle('borderColor''green');
  134.         if (event.ctrlKey) {
  135.             var itemsArray1:Array = 
  136.             event.dragSource.dataForFormat('items') as Array;
  137.             var tempItem1:Object = 
  138.                 { label: itemsArray[0].Client_Name, 
  139.                   data: itemsArray[0].Client_ID, 
  140.                   date: itemsArray[0].Client_Corp
  141.                 };                     
  142.             DragManager.showFeedback(DragManager.COPY);
  143.             return;
  144.         }
  145.         else {
  146.             var itemsArray:Array = 
  147.             event.dragSource.dataForFormat('items') as Array;
  148.             var tempItem:Object = 
  149.                 { label: itemsArray[0].Client_Name, 
  150.                   data: itemsArray[0].Client_ID, 
  151.                   date: itemsArray[0].Client_Corp
  152.                 }; 
  153.             DragManager.showFeedback(DragManager.MOVE);
  154.             return;
  155.         }
  156.     }
  157.     DragManager.showFeedback(DragManager.NONE);                 
  158. }
  159. private function dragDropHandler(event:DragEvent):void {
  160.     
  161. }
  162. //删除列表中某一条记录
  163. private function deleteItem():void
  164. {
  165.     if(printgrid.selectedIndex>=0){
  166.         printgrid.dataProvider.removeItemAt(printgrid.selectedIndex);
  167.     }else{
  168.         Alert.show("请选择记录!");
  169.     }
  170. }
  171. //添加外部数据源dgProvider:ArrayCollection全部数据
  172. private function fillAllRecord():void
  173. {
  174.     printgrid.dataProvider = dgProvider;
  175. }
       打印是用的是PrintDataGrid,以下是打印的页面:
       FormPrintHeader.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="60%"
  3.     horizontalAlign="right" >
  4. <mx:Script>
  5.     <![CDATA[
  6.         [Bindable]
  7.         public var printHeader:String = "客户信息列表";
  8.     ]]>
  9. </mx:Script>
  10.     <mx:Label text="{printHeader}"/>
  11. </mx:VBox>
     FormPrintFooter.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="60%"
  3.     horizontalAlign="right" >
  4.     <mx:Script>
  5.         <![CDATA[
  6.             [Bindable]
  7.             public var pTotal:Number = 0;
  8.             
  9.             [Bindable]
  10.             public var pCount:Number = 0;
  11.             
  12.         ]]>
  13.     </mx:Script>
  14.     <mx:Label text="记录总数:{pTotal}"/>
  15. </mx:VBox>
      FormPrintView.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:mycontrols="mycontrols.*" backgroundColor="#FFFFFF"
  3.     paddingTop="50" paddingBottom="50" paddingLeft="50" width="100%" height="100%">
  4.     <mx:Script>
  5.         <![CDATA[
  6.             import mx.core.*
  7.             [Bindable]
  8.             public var pageNumber:Number = 1;
  9.             [Bindable]
  10.             public var prodTotal:Number = 0;
  11.             
  12.             public function showPage(pageType:String):void {
  13.                 if(pageType == "first" || pageType == "middle") {
  14.                     footer.includeInLayout=false;
  15.                     footer.visible = false;
  16.                 }
  17.                 if(pageType == "middle" || pageType == "last") {
  18.                     header.includeInLayout=false;
  19.                     header.visible = false;
  20.                 }
  21.                 if(pageType == "last") {
  22.                     footer.includeInLayout=true;
  23.                     footer.visible = true;
  24.                 }
  25.                 validateNow();
  26.             }        
  27.         ]]>
  28.     </mx:Script>
  29.     <mx:VBox width="766" horizontalAlign="left">
  30.         <mx:Label text="-- {pageNumber}--"/>
  31.     </mx:VBox>
  32.     <mycontrols:FormPrintHeader id="header"  width="766"/>
  33.     <mx:PrintDataGrid id="myDataGrid" width="764" height="100%" fontSize="12">
  34.     </mx:PrintDataGrid>
  35.     <mycontrols:FormPrintFooter id="footer" pTotal="{prodTotal}"  width="765"/>
  36. </mx:VBox>
嘿嘿!今天先贴这个打印,也许这个看起来有点乱。以后我会尽量会写一些详细注释的。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值