0

FlexPrintJob を使用して Flex 3.2 でテーブルを印刷しようとしています。通常の印刷動作が必要です。すべての行が 1 ページに収まる場合は 1 ページ、複数のページを埋めるのに十分なデータがある場合は行の完全なページに続いて部分的に埋められたページです。どういうわけか、行ごとにページを取得します。各ページにはテーブルヘッダーがあり、その後に1行のデータが続き、その後に空白が続きます。

15 行のテーブルは、15 ページのドキュメントになります。Firefox と IE8 で同じ動作が得られます。

この動作の原因は何ですか? ご協力いただきありがとうございます!

コードは次のとおりです。

        // The function to print the output.
    public function onPrint():void {
        var printJob:FlexPrintJob = new FlexPrintJob();
        printJob.start();

        var thePrintView:FormPrintView = new FormPrintView();
        addChild(thePrintView);
        thePrintView.initPrintDataGrid(openSequences);
        // thePrintView.printOpenTimeGrid.dataProvider = printOpenTime.dataProvider;
        thePrintView.validateNow();

        thePrintView.width=printJob.pageWidth;
        thePrintView.height=printJob.pageHeight;

        printJob.addObject(thePrintView, FlexPrintJobScaleType.MATCH_WIDTH);

        while (thePrintView.printOpenTimeGrid.validNextPage) {
            //Put the next page of data in the view.
            thePrintView.printOpenTimeGrid.nextPage();
            //Queue the additional page.
            printJob.addObject(thePrintView, FlexPrintJobScaleType.MATCH_WIDTH);
        }

        printJob.send();
        removeChild(thePrintView);
        this.onClose();
    }

PrintDataGrid は TitleWindow オブジェクトに直接配置されています。

   <!-- 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="printOpenTimeGrid" dataProvider="{openSequences}" sizeToPage="true" width="100%" height="100%">
    <mx:columns>
        <mx:DataGridColumn dataField="startDate" headerText="Seq Date" width="70">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:VBox>
                        <mx:DateFormatter id="startDateFormatter" formatString="M/D/YYY"/>
                        <mx:Label fontWeight="bold" text="{startDateFormatter.format(data.startDate)}"/>
                    </mx:VBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
        <mx:DataGridColumn dataField="equipCode" headerText="EQP" width="40" />
        <mx:DataGridColumn dataField="base" headerText="BSE" width="40" />
        <mx:DataGridColumn dataField="sequenceNumber" headerText="SEQNO" width="45" />
        <mx:DataGridColumn dataField="seat" headerText="ST" width="40" />
        <mx:DataGridColumn headerText="DPRT" width="40">
            <mx:itemRenderer>
                <mx:Component>
                    <mx:VBox>
                        <mx:DateFormatter id="departTimeFormatter" formatString="JJNN"/>
                        <mx:Label fontWeight="bold" text="{departTimeFormatter.format(data.startDate)}"/>
                    </mx:VBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
        <mx:DataGridColumn dataField="terminationDate" headerText="ARVL/DT" width="60" >
            <mx:itemRenderer>
                <mx:Component>
                    <mx:VBox>
                        <mx:DateFormatter id="arvDateFormatter" formatString="JJNN/DD"/>
                        <mx:Label fontWeight="bold" text="{arvDateFormatter.format(data.startDate)}"/>
                    </mx:VBox>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
        <mx:DataGridColumn dataField="tripValue" headerText="TTL" width="50" />
        <mx:DataGridColumn dataField="blockType" headerText="Block Type" width="170" />
    </mx:columns>
</mx:PrintDataGrid>

プリントアウトはこんな感じ 1 ページに 1 行

4

1 に答える 1

0

この問題は、TitledWindow オブジェクト (PrintDataGrid のラッパー) に「高さ」パラメーターを追加することで解決されます。高さが 800 に設定されている場合、コンテンツはページ全体に印刷され、スクロール バーは表示されません。

<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" title="Open Time" height="800">
<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.core.*;

        [Bindable]
        private var openSequences:ArrayCollection;

        public function initPrintDataGrid(sequences:ArrayCollection):void {
            openSequences = sequences;
        }
    ]]>
</mx:Script>

<!-- 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="printOpenTimeGrid" dataProvider="{openSequences}" sizeToPage="true" 
    width="100%" height="100%">
    <mx:columns>
于 2012-05-16T20:24:48.690 に答える