2017-10-20 186 views
-1

我有一个AIR应用程序。 我想打印一组文本,图像和数据网格,我的文档就像一个报告。由于datagrid的高度不同,我不知道该怎么做。 你能帮我吗? 最好的问候as3用文本,图像和数据网格打印页面

+0

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/printing/PrintJob.html – Organis

回答

1

下面是从文档的例子:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/printing/FlexPrintJob.html

FormPrintFooter.mxml

<s:VGroup name="FormPrintFooter" 
     xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     width="60%" 
     horizontalAlign="right" > 

    <!-- Declare and initialize the product total variable. --> 
    <fx:Script> 
     <![CDATA[ 
      [Bindable] 
      public var pTotal:Number = 0; 
     ]]> 
    </fx:Script> 

    <s:Label text="Product Total: {pTotal}"/> 

</s:VGroup> 

FormPrintView.mxml

<!-- Custom control to print the Halo DataGrid control on multiple pages. --> 
<s:VGroup name="FormPrintView" 
     xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" 
     xmlns="*"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.core.*; 

      // Declare and initialize the variables used in the component. 
      // The application sets the actual prodTotal value. 
      [Bindable] 
      public var pageNumber:Number = 1; 

      [Bindable] 
      public var prodTotal:Number = 0; 

      // Control the page contents by selectively hiding the header and 
      // footer based on the page type. 
      public function showPage(pageType:String):void { 
       if (pageType == "first" || pageType == "middle") { 
        // Hide the footer. 
        footer.includeInLayout = false; 
        footer.visible = false; 
       } 
       if (pageType == "middle" || pageType == "last") { 
        // The header won't be used again; hide it. 
        header.includeInLayout = false; 
        header.visible = false; 
       } 
       if (pageType == "last") { 
        // Show the footer. 
        footer.includeInLayout = true; 
        footer.visible = true; 
       } 
       //Update the DataGrid layout to reflect the results. 
       validateNow(); 
      } 
     ]]> 
    </fx:Script> 

    <!-- The template for the printed page, with the contents for all pages. --> 
    <s:VGroup width="80%" horizontalAlign="left"> 
     <s:Label text="Page {pageNumber}"/> 
    </s:VGroup> 

    <FormPrintHeader id="header" /> 

    <!-- The data grid. The sizeToPage property is true by default, so the last 
     page has only as many grid rows as are needed for the data. --> 
    <mx:PrintDataGrid id="myDataGrid" width="60%" height="100%"> 
     <!-- Specify the columns to ensure that their order is correct. --> 
     <mx:columns> 
      <mx:DataGridColumn dataField="Index" /> 
      <mx:DataGridColumn dataField="Qty" /> 
     </mx:columns> 
    </mx:PrintDataGrid> 

    <!-- Create a FormPrintFooter control and set its prodTotal variable. --> 
    <FormPrintFooter id="footer" pTotal="{prodTotal}" /> 

</s:VGroup> 

PrintDataGridExample.mxml

<!-- Main application to print a Halo DataGrid control on multiple pages. --> 
<s:Application name="PrintDataGridExample.mxml" 
     xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx" 
     initialize="initData();"> 

    <fx:Script> 
     <![CDATA[ 

     import mx.printing.*; 
     import mx.collections.ArrayCollection; 
     import FormPrintView; 
     import mx.core.FlexGlobals; 

     // Declare variables and initialize simple variables. 
     [Bindable] 
     public var dgProvider:ArrayCollection; 
     public var footerHeight:Number = 20; 
     public var prodIndex:Number; 
     public var prodTotal:Number = 0; 

     // Data initialization. 
     public function initData():void { 
      // Create the data provider for the DataGrid control. 
      dgProvider = new ArrayCollection; 
     } 

     // Fill the dgProvider ArrayCollection with the specified items. 
     public function setdgProvider(items:int):void { 
      prodIndex=1; 
      dgProvider.removeAll(); 
      for (var z:int=0; z<items; z++) { 
       var prod1:Object = {}; 
       prod1.Qty = prodIndex * 7; 
       prod1.Index = prodIndex++; 
       prodTotal += prod1.Qty; 
       dgProvider.addItem(prod1); 
      } 
     } 

     // The function to print the output. 
     public function doPrint():void { 
      var printJob:FlexPrintJob = new FlexPrintJob(); 
      if (printJob.start()) { 
       // Create a FormPrintView control as a child of the current view. 
       var thePrintView:FormPrintView = new FormPrintView(); 
       FlexGlobals.topLevelApplication.addElement(thePrintView); 

       //Set the print view properties. 
       thePrintView.width=printJob.pageWidth; 
       thePrintView.height=printJob.pageHeight; 
       thePrintView.prodTotal = prodTotal; 
       // Set the data provider of the FormPrintView component's data grid 
       // to be the data provider of the displayed data grid. 
       thePrintView.myDataGrid.dataProvider = myDataGrid.dataProvider; 
       // Create a single-page image. 
       thePrintView.showPage("single"); 
       // If the print image's data grid can hold all the provider's rows, 
       // add the page to the print job. 
       if (!thePrintView.myDataGrid.validNextPage) { 
        printJob.addObject(thePrintView); 
       } 
       // Otherwise, the job requires multiple pages. 
       else { 
        // Create the first page and add it to the print job. 
        thePrintView.showPage("first"); 
        printJob.addObject(thePrintView); 
        thePrintView.pageNumber++; 
        // Loop through the following code until all pages are queued. 
        while (true) { 
         // Move the next page of data to the top of the print grid. 
         thePrintView.myDataGrid.nextPage(); 
         thePrintView.showPage("last"); 
         // If the page holds the remaining data, or if the last page 
         // was completely filled by the last grid data, queue it for printing. 
         // Test if there is data for another PrintDataGrid page. 
         if (!thePrintView.myDataGrid.validNextPage) { 
          // This is the last page; queue it and exit the print loop. 
          printJob.addObject(thePrintView); 
          break; 
         } else { 
          // This is not the last page. Queue a middle page. 
          thePrintView.showPage("middle"); 
          printJob.addObject(thePrintView); 
          thePrintView.pageNumber++; 
         } 
        } 
       } 
       // All pages are queued; remove the FormPrintView control to free memory. 
       FlexGlobals.topLevelApplication.removeElement(thePrintView); 
      } 
      // Send the job to the printer. 
      printJob.send(); 
     } 
     ]]> 
    </fx:Script> 

    <s:Panel title="DataGrid Printing Example" 
      width="75%" height="75%" 
      horizontalCenter="0" verticalCenter="0"> 
     <s:VGroup left="10" right="10" top="10" bottom="10"> 
      <mx:DataGrid id="myDataGrid" dataProvider="{dgProvider}"> 
       <mx:columns> 
        <mx:DataGridColumn dataField="Index"/> 
        <mx:DataGridColumn dataField="Qty"/> 
       </mx:columns> 
      </mx:DataGrid> 

      <s:Label width="100%" color="blue" 
       text="Specify the number of lines and click Fill Grid first. Then you can click Print."/> 

      <s:TextInput id="dataItems" text="35"/> 

      <s:HGroup> 
       <s:Button id="setDP" label="Fill Grid" click="setdgProvider(int(dataItems.text));"/> 
       <s:Button id="printDG" label="Print" click="doPrint();"/> 
      </s:HGroup> 
     </s:VGroup> 
    </s:Panel> 

</s:Application> 
+0

感谢这个答案,但如何打印标签,数据网格,另一个标签,另一个数据网格等...最好的问候 – Flex60460