轉載自:http://benben.javaeye.com/blog/278191
添加了一些注釋。
Flex中的列印技術:http://hi.baidu.com/woaidelphi/blog/item/ced9e9d7d5cb37d5a044dfb7.html
http://livedocs.adobe.com/flex/3_cn/langref/mx/printing/FlexPrintJob.html
Application:
DataGridPrint.mxml
<?xml version="1.0" encoding="utf-8"?>
<!-- printing/DGPrintCustomComp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
height="450"
width="550">
<mx:states>
<mx:State name="printView">
<mx:RemoveChild target="{myForm}"/>
<mx:AddChild position="lastChild">
<mx:Panel width="388" height="303" layout="absolute">
<mx:Image id="img" x="10" y="10"/>
</mx:Panel>
</mx:AddChild>
<mx:AddChild position="lastChild">
<mx:Button label="Back" click="currentState="""/>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Script>
<![CDATA[
import mx.printing.FlexPrintJob;
import mx.graphics.ImageSnapshot;
import mx.core.UIComponent;
import myComponent.MyPrintView;
//列印預覽
private function print(u:UIComponent):void{
//設定目前狀态為printView
currentState="printView";
//通過圖像快照ImageSnapshot獲得位圖資料
var bmp:BitmapData = ImageSnapshot.captureBitmapData(u);
//轉換為位圖
var i:Bitmap = new Bitmap(bmp);
//設定圖像的源為位圖i
img.source = i;
img.scaleContent = true;
}
//列印
public function doPrint():void {
// Create a FlexPrintJob instance.
//建立一個FlexPrintJob執行個體
var printJob:FlexPrintJob = new FlexPrintJob();
// var job:PrintJob=new PrintJob();
// Start the print job.
//啟動列印
if(printJob.start()) {
// Create a MyPrintView control as a child
// of the current view.
//建立一個MyPrintView控制器,添加到目前視圖中
var formPrintView:MyPrintView = new MyPrintView();
addChild(formPrintView);
// Set the print control's data grid data provider to be
// the displayed data grid's data provider.
//設定控件formPrintView的資料源為目前DataGrid控件的資料源
formPrintView.myDataGrid.dataProvider = myDataGrid.dataProvider;
// Add the SimplePrintview control to the print job.
// For comparison, try setting the
// second parameter to "none".
//添加列印控件
printJob.addObject(formPrintView);
// Send the job to the printer.
//發送資料到列印機
printJob.send();
// Remove the print-specific control to free memory.
//移除列印控件,釋放記憶體
removeChild(formPrintView);
}
}
]]>
</mx:Script>
<!-- The form to display-->
<mx:Form id="myForm">
<mx:FormHeading label="Contact Information"/>
<mx:FormItem label="Name: ">
<mx:TextInput id="custName" width="200" text="Samuel Smith" fontWeight="bold" />
</mx:FormItem>
<mx:FormItem label="Phone: ">
<mx:TextInput id="custPhone" width="200" text="617-555-1212" fontWeight="bold" />
</mx:FormItem>
<mx:FormItem label="Email: ">
<mx:TextInput id="custEmail" width="200" text="[email protected]" fontWeight="bold" />
</mx:FormItem>
<mx:FormHeading id="formhead" label="Product Information"/>
<mx:DataGrid id="myDataGrid" width="300">
<mx:dataProvider>
<mx:Object Product="Flash" Code="1000"/>
<mx:Object Product="Flex" Code="2000"/>
<mx:Object Product="ColdFusion" Code="3000"/>
<mx:Object Product="JRun" Code="4000"/>
</mx:dataProvider>
</mx:DataGrid>
<mx:Button label="PrintView" click="print(myDataGrid)"/>
<mx:FormItem label="Label"></mx:FormItem>
<mx:Button id="myButton" label="Print" click="doPrint();" />
</mx:Form>
</mx:Application>
Component:
MyPrintView. mxml
<?xml version="1.0" encoding="utf-8"?>
<!-- printing/myComponents/MyPrintView.mxml -->
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#FFFFFF" height="250" width="450" paddingTop="50"
paddingLeft="50" paddingRight="50">
<!-- The controls to print, a PrintDataGrid control. -->
<mx:PrintDataGrid id="myDataGrid" width="100%">
<mx:columns>
<mx:DataGridColumn dataField="Code"/>
<mx:DataGridColumn dataField="Product"/>
</mx:columns>
</mx:PrintDataGrid>
</mx:VBox>