[转]這是1個多分頁打印的類
[转]這是一個多分頁打印的類
http://bbs.9ria.com/viewthread.php?tid=101119&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
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(); } } } } }