分享

flex打印文档

 轮回谷 2011-08-09

因为打印往往需要动态设置数值,并且存入后台数据库,最好的方式是使用官方的打印api,最最好的方式是使用html和官方打印flexapi结合,as+js+html+css+flex可以完美预览,数据修改和打印页面设置。富客户端嵌入了webkit内核,因此as和js通信完全没问题。需要分页可以仔细研究下flexpaper

 

下面的组件多多少少有些局限性,或者没法在air中预览,或者不能动态修改被打印数据,或者需要在服务器端进行格式转换,或者要装插件,问题多多:

1 基于JasperReports的打印http://Flex.org/software/component/xviewer

2 FlexReport: http://Flexreport.

3 AlivePDF: http://code.google.com/p/alivepdf

4 flexpaper  http://flexpaper./docs.html

 

最简单的例子如下,alivepdf仅是用来保存pdf格式的,如果需要其他格式excel,word,似乎只能在服务器端做了:

Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"  
  3.                        xmlns:s="library://ns.adobe.com/flex/spark"  
  4.                        xmlns:mx="library://ns.adobe.com/flex/mx"  
  5.                        width="1200" height="700"  
  6.                         creationComplete="init()">   
  7.     <fx:Declarations>   
  8.         <!-- Place non-visual elements (e.g., services, value objects) here -->   
  9.     </fx:Declarations>   
  10.     <fx:Script>   
  11.         <![CDATA[   
  12.             import mx.collections.ArrayCollection;   
  13.             import mx.printing.FlexPrintJob;   
  14.             import flash.sampler.NewObjectSample;   
  15.             import flash.utils.ByteArray;   
  16.   
  17.             import mx.collections.ArrayCollection;   
  18.             import mx.controls.HTML;   
  19.             import mx.events.FlexEvent;   
  20.   
  21.             import org.alivepdf.annotations.Annotation;   
  22.             import org.alivepdf.annotations.AnnotationType;   
  23.             import org.alivepdf.annotations.TextAnnotation;   
  24.             import org.alivepdf.colors.CMYKColor;   
  25.             import org.alivepdf.colors.RGBColor;   
  26.             import org.alivepdf.colors.SpotColor;   
  27.             import org.alivepdf.data.Grid;   
  28.             import org.alivepdf.data.GridColumn;   
  29.             import org.alivepdf.events.CharacterEvent;   
  30.             import org.alivepdf.fonts.CodePage;   
  31.             import org.alivepdf.fonts.CoreFont;   
  32.             import org.alivepdf.fonts.EmbeddedFont;   
  33.             import org.alivepdf.fonts.FontFamily;   
  34.             import org.alivepdf.fonts.IFont;   
  35.             import org.alivepdf.images.ColorSpace;   
  36.             import org.alivepdf.layout.Align;   
  37.             import org.alivepdf.layout.Mode;   
  38.             import org.alivepdf.layout.Orientation;   
  39.             import org.alivepdf.layout.Position;   
  40.             import org.alivepdf.layout.Resize;   
  41.             import org.alivepdf.layout.Size;   
  42.             import org.alivepdf.layout.Unit;   
  43.             import org.alivepdf.links.HTTPLink;   
  44.             import org.alivepdf.links.Highlight;   
  45.             import org.alivepdf.links.ILink;   
  46.             import org.alivepdf.links.InternalLink;   
  47.             import org.alivepdf.pages.Page;   
  48.             import org.alivepdf.pdf.PDF;   
  49.             import org.alivepdf.saving.Method;   
  50.             import org.alivepdf.display.Display;   
  51.             import org.alivepdf.layout.Layout;   
  52.   
  53.   
  54.             [Bindable]   
  55.             public var dataSource:ArrayCollection = new ArrayCollection();   
  56.   
  57.             private var totalRecords:Number = 15;   
  58.   
  59.             private function init():void {   
  60.                 pageMenu.selectedIndex=1;   
  61.                 var page:Object=pageMenu.selectedItem as Object;   
  62.                 containerBox.width=page.width;   
  63.                 containerBox.height=page.height;   
  64.             }   
  65.   
  66.             private function doPrint():void {   
  67.                 var printJob:FlexPrintJob = new FlexPrintJob();   
  68.                 printJob.printAsBitmap=false;   //提高文字清晰度   
  69.                 if (printJob.start()) {   
  70.                     printJob.addObject(containerBox);   
  71.                     printJob.send();   
  72.                 }   
  73.             }   
  74.             public var pages:ArrayCollection = new ArrayCollection(   
  75.                 [   
  76.                     {index:3,label:"A3",width:Size.A3.dimensions[0],height:Size.A3.dimensions[1]},   
  77.                     {index:4,label:"A4",width:Size.A4.dimensions[0],height:Size.A4.dimensions[1]},   
  78.                     {index:5,label:"A5",width:Size.A5.dimensions[0],height:Size.A5.dimensions[1]} ]);   
  79.             private function changePageHandler(event:Event):void {   
  80.                 var page:Object=DropDownList(event.target).selectedItem as Object;   
  81.                 pageDescription.text=page.width+"*"+page.height;   
  82.                 containerBox.width=page.width;   
  83.                 containerBox.height=page.height;   
  84.   
  85.             }   
  86.   
  87.             protected function directClickHandler(event:MouseEvent):void  
  88.             {   
  89.                 if(direct.label=="方向:横"){   
  90.                     direct.label="方向:竖";   
  91.                     var page:Object=pageMenu.selectedItem as Object;   
  92.                     containerBox.width=page.height;   
  93.                     containerBox.height=page.width;   
  94.                 }else{   
  95.                     direct.label="方向:横";   
  96.                     var page:Object=pageMenu.selectedItem as Object;   
  97.                     pageDescription.text=page.data;   
  98.                     containerBox.width=page.width;   
  99.                     containerBox.height=page.height;   
  100.                 }   
  101.             }   
  102.             [Embed( source="../assets/Capture it.ttf", mimeType="application/octet-stream" )]   
  103.             private var fontStream:Class;   
  104.             private var file:File;   
  105.             private var b:ByteArray = new ByteArray();   
  106.   
  107.             private function createPDF():void  
  108.             {   
  109.                 var t:ByteArray = new fontStream();   
  110.                 var ty:Array=Size.A4.dimensions;   
  111.                 trace(Size.A4.dimensions.toString());   
  112.                 trace(Size.A4.inchesSize.toString());   
  113.                 trace(Size.A4.mmSize.toString());   
  114.                 var uf:IFont = new CoreFont ( FontFamily.ARIAL );   
  115.                 var p:PDF = new PDF( Orientation.PORTRAIT, Unit.MM, Size.A4 );   
  116.                 p.setDisplayMode( Display.FULL_PAGE, Layout.SINGLE_PAGE );   
  117.                 p.addPage();   
  118.   
  119.                 p.textStyle( new RGBColor(0x990000), 1 );   
  120.                 p.setFont(uf, 9);   
  121.   
  122.                 p.addImage( this.printData );   
  123.   
  124.   
  125.                 var f:FileStream = new FileStream();   
  126.                 file = File.desktopDirectory.resolvePath("exported.pdf");   
  127.                 f.open( file, FileMode.WRITE);   
  128.                 var bytes:ByteArray = p.save( Method.LOCAL );   
  129.                 f.writeBytes(bytes);   
  130.                 f.close();   
  131.             }   
  132.   
  133.         ]]>   
  134.     </fx:Script>   
  135.  <mx:VBox id="topMenu" width="100%" height="100%" horizontalScrollPolicy="auto" verticalScrollPolicy="auto">   
  136.   
  137.     <mx:ApplicationControlBar id="dockedBar"  
  138.                               dock="true" paddingTop="0" paddingBottom="0">   
  139.   
  140.   
  141.         <mx:HBox paddingBottom="5" verticalAlign="middle" horizontalAlign="left"  
  142.                  paddingTop="5">   
  143.             <mx:Label text="纸型" />   
  144.             <s:DropDownList id="pageMenu" labelField="label" dataProvider="{pages}" textAlign="center" width="114" color="0x000000"  
  145.                              change="changePageHandler(event);" selectedIndex="0" height="39"/>   
  146.             <mx:Label textAlign="center" id="pageDescription" text="" />   
  147.             <mx:LinkButton  id="direct" click="directClickHandler(event)" label="方向:横"  />   
  148.             <mx:Label text="左边距" />   
  149.             <mx:HSlider id="lBar" width="60"  minimum="0" maximum="100" value="1" snapInterval="1" liveDragging="true" />   
  150.             <mx:Label text="右边距" />   
  151.             <mx:HSlider id="rBar" width="60"  minimum="0" maximum="100" value="1" snapInterval="1" liveDragging="true" />   
  152.             <mx:Label text="上边距" />   
  153.             <mx:HSlider id="tBar" width="60"  minimum="0" maximum="100" value="1" snapInterval="1" liveDragging="true" />   
  154.             <mx:Label text="下边距" />   
  155.             <mx:HSlider id="bBar" width="60"  minimum="0" maximum="100" value="1" snapInterval="1" liveDragging="true" />   
  156.   
  157.             <mx:Spacer width="50"/>   
  158.             <mx:Button  label="另存为PDF" click="createPDF()" />   
  159.             <mx:Button label="Print" click="doPrint()"/>   
  160.         </mx:HBox>   
  161.     </mx:ApplicationControlBar>   
  162.     <mx:Panel layout="absolute" horizontalScrollPolicy="off"  title="打印预览区域" paddingBottom="35" paddingLeft="30" paddingRight="30"  paddingTop="60" horizontalAlign="center" width="100%" height="100%" >   
  163.   
  164.         <mx:Box y="30" horizontalScrollPolicy="off" id="containerBox" removedEffect="Resize"  
  165.               borderStyle="solid"  
  166.               horizontalAlign="center" verticalAlign="middle"  
  167.                horizontalCenter="0"  
  168.               paddingLeft="{lBar.value}"  
  169.               paddingRight="{rBar.value}"  
  170.               paddingTop="{tBar.value}"  
  171.               paddingBottom="{bBar.value}"  
  172.               >   
  173.   
  174.         <mx:Box borderStyle="solid" borderColor="0xEEEEEE"  id="printData" borderAlpha="10" borderVisible="false" width="100%" height="100%">   
  175.   
  176.     <mx:HTML width="100%" height="100%" location="template/CustomerInfo.htm">   
  177.   
  178.     </mx:HTML>   
  179.   
  180.         </mx:Box>   
  181.   
  182.         </mx:Box>   
  183.   
  184.   
  185.     </mx:Panel>   
  186.   
  187.  </mx:VBox>   
  188. </s:WindowedApplication>  

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多