Search code examples
actionscript-3apache-flexprintingflex3

Flex 3: inquiry about printing


I have created a scheduling application that spans upwards of 16 weeks. I would like to be able to print the schedule using Flex. I've created a test application that lists incrementing dates. These dates obviously stretch longer than the width of my computer. I would like for my print function to print the entire width of dates across several pages... currently, it prints just what appears on my screen. Is there a way to accomplish this?

Below is the app i've created. There are some calls to custom functions, but they in no way relate to the issue at hand:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
<mx:Script source="functions/dateFunctions.as" />
<mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.collections.ArrayCollection;
        [Bindable] public var date:Date = new Date;
        public var numDays:Number = 50;
        [Bindable] public var datesAC:ArrayCollection = new ArrayCollection;
        public function init():void
        {
            var tempDate:String = new String;
            for (var i:int = 0; i < numDays; i++)
            {
                tempDate = dateToNumText(rightDate(date.getMonth(), date.getDate() + i, date.getFullYear()));
                datesAC.addItem(tempDate);
            }
        }

        private function printMe() :void 
        {
            var pj:PrintJob = new PrintJob();
            pj.start();

            // setTimeout(function() :void { finishPrinting(pj);}, 1);

            finishPrinting(pj);
        }

        private function finishPrinting(pj:PrintJob): void {
            pj.addPage(this);
            pj.send();
        }
    ]]>
</mx:Script>
<mx:VBox width="100%" height="100%">
    <mx:Button id="print" label="Start Print" click="printMe()" />
    <mx:HorizontalList id="dateList" dataProvider="{datesAC}" width="100%" height="100%" useRollOver="false">
        <mx:itemRenderer>
            <mx:Component>
                <mx:Canvas borderColor="#000000" borderSides="right" borderStyle="solid">
                    <mx:Text text="{data}" textAlign="center" color="#000000" width="100" />
                </mx:Canvas>
            </mx:Component>
        </mx:itemRenderer>
    </mx:HorizontalList>
</mx:VBox>
</mx:Application>

Solution

  • You would have to break up/paginate content on your own. You can send each such logically broken up page to PrintJob.appPage() API so it becomes a printed paper. At present, what is happening would be that content would be getting clipped.