0

我的数据网格从页面的最顶部开始打印。我不知道如何向下移动数据网格。我在 FlexPrintJob 或 PrintAdvancedDataGrid 中看不到任何可以执行此操作的内容。我是否必须创建一个空白对象才能添加到 FlexPrintJob 对象的顶部?

任何帮助或有帮助的链接。

谢谢,

约翰

4

1 回答 1

0

在尝试了很多从 adobe 和其他对我来说根本不起作用的示例之后,我发现我必须将数据网格放在一个 vBox 中,在那里我可以在数据网格上方放置一个空白标题。正如所有示例所示,最好使用 vBox 组件来完成。

下面是我想出的一个工作示例,它与我找到的示例有点不同。在 vBox 组件中,您可以做很多事情来增强打印作业。就我而言,我添加了标题和日期。

希望这可以帮助那里的人,

约翰


我正在使用通用函数来打印我的应用程序中可能拥有的任何 AdvancedDataGrid ...

public function printAdvancedDataGridContents(advDG:AdvancedDataGrid, xmlListCollection:XMLListCollection, headerText:String):void
    {
        const printJob:FlexPrintJob = new FlexPrintJob();               
        if ( printJob.start() ) {
            //create an instance of the FormPrintView_ADG component containing the datagrid
            var thePrintView:FormPrintView_ADG = new FormPrintView_ADG();
            //add the component to my application
            FlexGlobals.topLevelApplication.addChild(thePrintView);
            //load the datagrid
            thePrintView.printDataGrid.dataProvider = xmlListCollection.copy();
            //format the datagrid
            thePrintView.printDataGrid.width = printJob.pageWidth-45; //set a left margin for the dg in a right justiified vBox
            thePrintView.printDataGrid.height = printJob.pageHeight-73; //page adjusted for header title and date
            thePrintView.printDataGrid.setStyle("fontSize", 8);
            thePrintView.printDataGrid.columns = advDG.columns;
            thePrintView.printDataGrid.setStyle("fontFamily", 'Times');
            thePrintView.printDataGrid.setStyle("color", 000000);
            //set the header text
            thePrintView.headerText.height = 45;
            thePrintView.headerText.width = printJob.pageWidth-20;
            thePrintView.headerText.text = "\r"+headerText;
            //add the first page to the print job
            printJob.addObject(thePrintView, FlexPrintJobScaleType.NONE);
            while (thePrintView.printDataGrid.validNextPage) {
                // Move the next page of data to the top of the PrintDataGrid and add it to the printjob
                thePrintView.printDataGrid.nextPage();
                printJob.addObject(thePrintView, FlexPrintJobScaleType.NONE);                       
            }
            //print it and remove the component from my application
            printJob.send();
            FlexGlobals.topLevelApplication.removeChild(thePrintView);                  
        }
    }

这是我正在使用的 vBox 组件...

<?xml version="1.0"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
    horizontalAlign="right"
    creationComplete="init();">

    <mx:Script>
    <![CDATA[
        [Bindable] private var date:String;

        private function init():void{
            date = new Date().toString();
            date = df.format(date);
        }
    ]]>
    </mx:Script>

    <mx:DateFormatter id="df" formatString="EEEE, MMMM D, YYYY"/>
    <!-- this header can contain a title or be left blank to create a top margin -->
    <mx:TextArea id="headerText"  borderThickness="0" color="#000000" fontWeight="bold"
                textAlign="center" textDecoration="none"/>
    <!-- date label. set visible to false in the calling function if not needed -->
    <mx:Label color="#000000" fontSize="8" fontStyle="normal" fontWeight="normal" text="{date}"/>
    <!-- the data grid -->
    <mx:PrintAdvancedDataGrid id="printDataGrid"/>  
</mx:VBox>    
于 2013-10-03T17:00:25.917 回答