`

[转]這是一個多分頁打印的類

阅读更多
http://bbs.9ria.com/viewthread.php?tid=101119&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000

package org
{ 
    import flash.display.MovieClip; 
    import flash.printing.PrintJob; 
    import flash.printing.PrintJobOrientation; 
    import flash.display.Stage; 
    import flash.display.Sprite; 
    import flash.text.TextField; 
    import flash.geom.Rectangle; 
        import flash.text.TextFormat;
        /**
         * ...
         * @author vinson
         * 這是一個多分頁打印的類,只有一個公用方法setPrint
         * 以A4紙,12號字體每頁60行字來計算,這樣如果是170行字就會自動打印成三頁內容
         */
    public class PrintMultiplePages extends MovieClip 
    { 
                private var sheetBox:Array;
                private var sheet:Sprite;
        public function PrintMultiplePages():void 
        {
                        init();
        } 
                private function init():void
                {
                        sheetBox=new Array;
                }
                public function setPrint(allStr:String):void
                {
                        var txt:TextField = createText();
            txt.text = allStr;
                        trace(txt.numLines)
                        var limitLine:int = 60;//限制每頁60行
                        var allPages:int= Math.ceil(txt.numLines / limitLine)//總的有幾頁
                        var remainder:int = txt.numLines % limitLine;//最後一頁不是60行而是餘下的行數
                        for (var i:int = 0; i < allPages; i++)
                        {
                                var sheet:Sprite = new Sprite();
                                var tempStr:String="";
                                var tempLine:int = limitLine * i
                                if (i != allPages-1)
                                {
                                        for (var j:int = tempLine; j < tempLine + limitLine;j++)
                                        {
                                                tempStr+= txt.getLineText(j);
                                        }
                                }
                                else
                                {
                                        for (j = tempLine; j < tempLine + remainder-1;j++)
                                        {
                                                tempStr+= txt.getLineText(j);
                                        }
                                        
                                }
                                trace(i,tempStr)
                                createSheet(sheet, tempStr);
                                sheetBox.push(sheet)
                        }
                        
                        printPages();
                }
         private function createSheet(sheet:Sprite, str:String):void 
        { 
            sheet.graphics.beginFill(0xFFFFFF); 
            sheet.graphics.lineStyle(1, 0xFFFFFF); 
            sheet.graphics.drawRect(0, 0, 787, 1092); 
            sheet.graphics.endFill(); 
                        var txt:TextField = createText();
            txt.text = str;
            sheet.addChild(txt);
                        //this.addChild(sheet)
        } 
                private function createText():TextField
                {
                        var txtFormat:TextFormat = new TextFormat;
                        txtFormat.leftMargin = 2;
                        txtFormat.rightMargin = 60;
                        
            var txt:TextField = new TextField();
                        txt.defaultTextFormat = txtFormat;
                        txt.wordWrap = true; 
                        txt.multiline = true;
            txt.height = 1090; 
            txt.width = 650;
                        return txt;
                }
        private function printPages():void 
        { 
            var pj:PrintJob = new PrintJob(); 
            var pagesToPrint:uint = 0; 
            if (pj.start()) 
            { 
                if (pj.orientation == PrintJobOrientation.LANDSCAPE) 
                { 
                    throw new Error("Page is not set to an orientation of portrait."); 
                } 
                                for (var i:int = 0; i < sheetBox.length; i++)
                                {
                                        var sheet:Sprite=sheetBox[i]
                                        try 
                                        { 
                                                pj.addPage(sheet); 
                                                pagesToPrint++; 
                                        } 
                                        catch (error:Error) 
                                        { 
                                                // Respond to error. 
                                        }
                                }
                if (pagesToPrint > 0) 
                { 
                    pj.send(); 
                } 
            } 
        } 
    } 
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics