`
qq123zhz
  • 浏览: 530800 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

flex字体加载5

    博客分类:
  • Flex
阅读更多

flex 字体另外一种加载方式:利用国外牛人写的字体加载组件。。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600"
				creationComplete="init(event)">
	<mx:Script>
		<![CDATA[
			import fontload.FontLoader;
			
			import mx.controls.Alert;
			import mx.events.FlexEvent;
			
			private var fontLoader:FontLoader=new FontLoader();
			protected function init(event:FlexEvent):void
			{
				// TODO Auto-generated method stub
				fontLoader.addEventListener(Event.COMPLETE,loadFontCompleteHandler);
				fontLoader.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
				fontLoader.addEventListener(ProgressEvent.PROGRESS,progressHandler);
			}
			
			private function loadFont():void
			{
				fontLoader.load(new URLRequest(cbxFontFile.selectedItem.label));
				pbar.visible=true;
			}
			private function loadFontCompleteHandler(e:Event):void{
				var fonts:Array = fontLoader.fonts;
				cbxFonts.dataProvider=fonts;
			}
			private function errorHandler(e:IOErrorEvent):void{
				Alert.show(e.text,"Error");
			}
			private function progressHandler(e:ProgressEvent):void{
				var percent:Number =Math.round(e.bytesLoaded/e.bytesTotal*100);
				pbar.setProgress(percent,100);
				pbar.label="loading "+percent+"%"+" file size:"+int(e.bytesTotal/1024)+"K";
			}
			
			private function setFont():void
			{
				txtMsg.setStyle("fontFamily",cbxFonts.selectedItem.fontName);
			}

		]]>
	</mx:Script>
	
	<mx:ApplicationControlBar width="100%" fillAlphas="[1.0,1.0]" fillColors="[#f5f5f5,#cccccc]">
		<mx:FormItem label="file|Font file:" indicatorGap="0">
			<mx:ComboBox id="cbxFontFile" prompt="-Select File-" selectedIndex="-1" change="loadFont()">
				<mx:dataProvider>
					<mx:Object label="FontAssets.swf"/>
					<mx:Object label="FangSongFont.swf"/>
					<mx:Object label="MiniCartoonFont.swf"/>
					<mx:Object label="font.swf"/>
				</mx:dataProvider>
			</mx:ComboBox>
		</mx:FormItem>
		
		<mx:FormItem label="Font|Font Name:" indicatorGap="0">
			<mx:ComboBox id="cbxFonts" prompt="-Select Font-" labelField="fontName" change="setFont()"/>
		</mx:FormItem>
		
		<mx:Spacer height="100%" width="100%"/>
	</mx:ApplicationControlBar>
	
	<mx:VBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
		<mx:Text id="txtMsg" width="100%" text="ABCDEFG 中国人人民共合谷" fontSize="36" textAlign="center" fontWeight="normal"/>
		<mx:Spacer width="100%" height="30"/>
		<mx:ProgressBar id="pbar" mode="manual" minimum="0" maximum="100" trackHeight="10" visible="false"/>
	</mx:VBox>
</mx:Application>

  牛人写的字体加载组件:

/**
* FontLoader 2.2 by Denis Kolyako. June 13, 2008. Last update: June 25, 2009.
* Visit http://etcs.ru for documentation, updates and more free code.
*
* You may distribute this class freely, provided it is not modified in any way (including
* removing this header or changing the package path).
* 
*
* Please contact etc[at]mail.ru prior to distributing modified versions of this class.
*/
/**
 * The FontLoader class lets you load any swf movie (ver. 6 or later), which contains embedded fonts to use these fonts in your application.
 */
package  fontload {
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.events.SecurityErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.system.ApplicationDomain;
	import flash.system.LoaderContext;
	import flash.text.Font;
	import flash.utils.ByteArray;
	import flash.utils.Endian;
	import flash.events.ErrorEvent;
	
	[Event(name="complete", type="flash.events.Event")]
	[Event(name="open", type="flash.events.Event")]
	[Event(name="ioError", type="flash.events.IOErrorEvent")]
	[Event(name="verifyError", type="flash.events.IOErrorEvent")]
	[Event(name="httpStatus", type="flash.events.HTTPStatusEvent")]
	[Event(name="progress", type="flash.events.ProgressEvent")]
	[Event(name="securityError", type="flash.events.SecurityErrorEvent")]
	/**
	 * FontLoader class
	 * 
	 * @author					etc
	 * @version					2.2
	 * @playerversion			Flash 9
	 * @langversion				3.0
	 */
	public class FontLoader extends EventDispatcher {
		
		/**
		 * @private
		 */
		private static const SWF_HEADER:ByteArray = new ByteArray();
				
		/**
		 * @private
		 */
		private static const CLASS_CODE:ByteArray = new ByteArray();
		
		/**
		 * @private
		 */
		private static const CLASS_NAME_PREFIX:String = 'Font$';
		
		/**
		 * @private
		 */
		private static const TAG_DO_ABC:uint = ((72 << 6) | 0x3F);
		
		/**
		 * @private
		 */
		private static const TAG_SYMBOL_CLASS:uint = ((76 << 6) | 0x3f);

		/**
		 * @private
		 */
		private static var _initialized:Boolean = false;
		
		/**
		 * @private
		 */
		private static function init():void {
			if (FontLoader._initialized) return;
			var ba:SWFByteArray = new SWFByteArray();
			ba.writeBytesFromString(
				'7800055F00000FA000000C01004411080000004302FFFFFFBF150B0000000100466F6E744C69620000' +
				'BF1461020000010000000010002E00000000191272752E657463732E7574696C733A466F6E7400432F' + 
				'55736572732F6574632F4465736B746F702F50726F6A656374732F466F6E744C6F616465724C69622F' + 
				'7372633B72752F657463732F7574696C733B466F6E742E61731772752E657463732E7574696C733A46' + 
				'6F6E742F466F6E74175B4F626A65637420466F6E7420666F6E744E616D653D2208666F6E744E616D65' + 
				'0D2220666F6E745374796C653D2209666F6E745374796C650C2220666F6E74547970653D2208666F6E' + 
				'745479706502225D1B72752E657463732E7574696C733A466F6E742F746F537472696E670653747269' + 
				'6E6708746F537472696E67175F5F676F5F746F5F646566696E6974696F6E5F68656C700466696C6543' + 
				'2F55736572732F6574632F4465736B746F702F50726F6A656374732F466F6E744C6F616465724C6962' + 
				'2F7372632F72752F657463732F7574696C732F466F6E742E617303706F73033636380D72752E657463' + 
				'732E7574696C7304466F6E740A666C6173682E74657874064F626A6563740335373006050116021614' + 
				'161618010201030A07020607020807020A07020D07020E070315070415091501070217040000020000' + 
				'00040000040C0000000200020F02101211130F02101211180106070905000101054100020100000001' + 
				'030106440000010104000101040503D03047000001010105060EF103F018D030F019D04900F01A4700' + 
				'00020201050620F103F01CD0302C05F01DD00401A02C07A0D00402A02C09A0D00403A02C0BA0480000' + 
				'030201010421D030F103F0165D085D096609305D076607305D07660758001D1D6806F103F00B470000'
			); // Magic bytes :-)
			ba.position = 0;
			ba.readBytes(FontLoader.SWF_HEADER);
			ba.length = 0;
			ba.writeBytesFromString(
				'392F55736572732F6574632F4465736B746F702F50726F6A656374732F466F6E744C6F616465724C69' + 
				'622F7372633B3B466F6E743030302E61730568656C6C6F2B48656C6C6F2C20776F726C642120497320' + 
				'616E79626F647920686572653F2057686F27732074686572653F0F466F6E743030302F466F6E743030' + 
				'300D72752E657463732E7574696C7304466F6E74064F626A6563740A666C6173682E74657874175F5F' + 
				'676F5F746F5F646566696E6974696F6E5F68656C700466696C65382F55736572732F6574632F446573' + 
				'6B746F702F50726F6A656374732F466F6E744C6F616465724C69622F7372632F466F6E743030302E61' + 
				'7303706F73023534060501160216071801160A00050702010703080702090705080300000200000006' + 
				'0000000200010B020C0E0D0F0101020904000100000001020101440100010003000101050603D03047' + 
				'0000010102060719F103F006D030EF01040008F007D049002C05F00885D5F009470000020201010527' + 
				'D030F103F00465005D036603305D046604305D026602305D02660258001D1D1D6801F103F002470000'
			); // Another magic bytes :-)
			ba.position = 0;
			ba.readBytes(FontLoader.CLASS_CODE);
			ba.length = 0;
			FontLoader._initialized = true;
		}
		
		/**
		 * Creates a new FontLoader object. If you pass a valid URLRequest object to the FontLoader constructor,
		 * the constructor automatically calls the load() function.
		 * If you do not pass a valid URLRequest object to the FontLoader constructor,
		 * you must call the load() function or the stream will not load. 
		 * 
		 * @param request (default = null) — The URL that points to an external SWF file. 
		 * @param autoRegister — Register loaded fonts automatically.
		 */
		public function FontLoader(request:URLRequest = null, autoRegister:Boolean = true) {
			super();
			FontLoader.init();
			this._loader.dataFormat = URLLoaderDataFormat.BINARY;
			this._loader.addEventListener(Event.COMPLETE, 						this.handler_complete);
			this._loader.addEventListener(Event.OPEN, 							super.dispatchEvent);
			this._loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, 			super.dispatchEvent);
			this._loader.addEventListener(IOErrorEvent.IO_ERROR, 				super.dispatchEvent);
			this._loader.addEventListener(ProgressEvent.PROGRESS, 				super.dispatchEvent);
			this._loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, 	super.dispatchEvent);
			if (request) this.load(request, autoRegister);
		}
				
		/**
		 * @private
		 */
		private const _loader:URLLoader = new URLLoader();
		
		/**
		 * @private
		 */
		private var _bytes:ByteArray;
				
		/**
		 * @private
		 */
		private var _libLoader:Loader;

		/**
		 * @private
		 */
		private var _fontCount:uint;
				
		/**
		 * @private
		 */
		private var _autoRegister:Boolean = true;
		
		/**
		 * Sets automatic font registration.
		 */
		public function set autoRegister(value:Boolean):void {
			if (this._autoRegister == value) return;
			this._autoRegister = value;
			if (value) this.registerFonts();
		}
		
		public function get autoRegister():Boolean {
			return this._autoRegister;
		}
		
		public function get bytesLoaded():uint {
			return this._loader.bytesLoaded;
		}
		
		public function get bytesTotal():uint {
			return this._loader.bytesTotal;
		}

		/**
		 * @private
		 */
		private const _fonts:Array = new Array();

		/**
		 * Returns an array of font classes, which you can use to register any extracted font.
		 */
		public function get fonts():Array {
			return this._fonts.concat();
		}

		/**
		 * Initiates loading of an external SWF file from the specified URL. You can load another swf file, when previous operation completed (or stream closed by user).
		 * 
		 * @param request:URLRequest — A URLRequest object specifying the URL to download. If the value of this parameter or the URLRequest.url property of the URLRequest object passed are null, Flash Player throws a null pointer error.  
		 * @param autoRegister — Register loaded fonts automatically.
 		 * 
		 * @event complete:Event — Dispatched after data has loaded and parsed successfully.
		 * @event httpStatus:HTTPStatusEvent — If access is by HTTP, and the current Flash Player environment supports obtaining status codes, you may receive these events in addition to any complete or error event.
		 * @event ioError:IOErrorEvent — The load operation could not be completed.
		 * @event verifyError:IOErrorEvent — Dispatched when a parse operation fails (data has incorrect format).
		 * @event open:Event — Dispatched when a load operation starts.
		 * @event securityError:SecurityErrorEvent — A load operation attempted to retrieve data from a server outside the caller's security sandbox. This may be worked around using a policy file on the server. 
		 */
		public function load(request:URLRequest, autoRegister:Boolean = true):void {
			this.close();
			this._fonts.length = 0;
			this._fontCount = 0;
			this._autoRegister = autoRegister;
			this._loader.load(request);
		}
		
		/**
		 * Loads from binary data stored in a ByteArray object.
		 * 
		 * @param bytes:URLRequest — A ByteArray object. The specified ByteArray must contain valid SWF file. 
		 * @param autoRegister — Register loaded fonts automatically.
 		 * 
		 * @event complete:Event — Dispatched after data has loaded and parsed successfully.
		 * @event httpStatus:HTTPStatusEvent — If access is by HTTP, and the current Flash Player environment supports obtaining status codes, you may receive these events in addition to any complete or error event.
		 * @event ioError:IOErrorEvent — The load operation could not be completed.
		 * @event verifyError:IOErrorEvent — Dispatched when a parse operation fails (data has incorrect format).
		 * @event open:Event — Dispatched when a load operation starts.
		 * @event securityError:SecurityErrorEvent — A load operation attempted to retrieve data from a server outside the caller's security sandbox. This may be worked around using a policy file on the server. 
		 */
		public function loadBytes(bytes:ByteArray, autoRegister:Boolean = true):void {
			this.close();
			this._fonts.length = 0;
			this._fontCount = 0;
			this._autoRegister = autoRegister;
			this.analyze(bytes, true);
		}
		
		/**
		 * Closes the stream, causing any download of data to cease.
		 */
		public function close():void {
			try {
				this._loader.close();
			} catch (error:Error) {}
			
			if (this._libLoader) {
				this._libLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, this.handler_libComplete);
				
				try {
					this._libLoader.close();
				} catch (error:Error) {}

				try {
					this._libLoader.unload();
				} catch (error:Error) {}

				this._libLoader = null;
			}
		}
		
		/**
		 * Registers all loaded fonts.
		 */		
		public function registerFonts():void {
			for each (var font:Font in this._fonts) {
				Font.registerFont((font as Object).constructor);
			}
		}
		
		/**
		 * @private
		 */
		private function analyze(bytes:ByteArray, delayed:Boolean = false):void {
			var o:Object;
			var stringID:String;
			var id:uint;
			var fontID:uint;
			var tag:uint
			var length:uint;
			var pos:Number;
			var tempData:ByteArray;
			var fontSWF:ByteArray;
			var context:LoaderContext;
			var data:ByteArray;
						
			try {
				data = new SWFByteArray(bytes);
			} catch (error:Error) {
				if (delayed) {
					this._libLoader = new Loader();
					this._libLoader.addEventListener(Event.ENTER_FRAME, this.handler_delayedVerifyError);
				} else {
					this.close();
					super.dispatchEvent(new IOErrorEvent(IOErrorEvent.VERIFY_ERROR));
				}
				
				return;
			}
			
			var fontData:Object = new Object();
			var classCodeLength:uint = FontLoader.CLASS_CODE.length;
						
			while (data.bytesAvailable) {
				tag = data.readUnsignedShort();
				id = tag >> 6;
				length = ((tag & 0x3F) == 0x3F) ? data.readUnsignedInt() : (tag & 0x3F);
				pos = data.position;
				
				switch (id) {
					case 13:
					case 48:
					case 62:
					case 73:
					case 75:
					case 88:
						fontID = data.readUnsignedShort();
						tempData = fontData[fontID] as ByteArray;
						
						if (!tempData) {
							tempData = new ByteArray();
							tempData.endian = Endian.LITTLE_ENDIAN;
							fontData[fontID] = tempData;
						}
						
						if ((tag & 0x3F) == 0x3F) {
							tempData.writeShort((id << 6) | 0x3F);
							tempData.writeUnsignedInt(length);
						} else {
							tempData.writeShort((id << 6) | (length & 0x3F));
						}
						
						tempData.writeShort(fontID);
						tempData.writeBytes(data, data.position, length - 2);
					break;
				}

				data.position = pos + length;
			}
			
			tempData = new ByteArray();
			tempData.endian = Endian.LITTLE_ENDIAN;
			tempData.writeBytes(FontLoader.SWF_HEADER);
			id = 0;

			for (o in fontData) {
				data = fontData[o] as ByteArray;
				
				if (data) {
					stringID = id.toString();
					while (stringID.length < 3) stringID = '0' + stringID;
					stringID = FontLoader.CLASS_NAME_PREFIX + stringID;
					tempData.writeShort(FontLoader.TAG_DO_ABC);
					tempData.writeUnsignedInt(10 + stringID.length + classCodeLength);
					tempData.writeUnsignedInt(0x002E0010);
					tempData.writeUnsignedInt(0x10000000);
					tempData.writeByte(stringID.length);
					tempData.writeUTFBytes(stringID);
					tempData.writeByte(0);
					tempData.writeBytes(FontLoader.CLASS_CODE);
					tempData.writeBytes(data);
					tempData.writeShort(FontLoader.TAG_SYMBOL_CLASS);
					tempData.writeUnsignedInt(5 + stringID.length);
					tempData.writeShort(1);
					tempData.writeShort(o as uint);
					tempData.writeUTFBytes(stringID);
					tempData.writeByte(0);
					id++;
				}
			}
			
			this._fontCount = id;
			
			if (this._fontCount) {
				tempData.writeUnsignedInt(0x00000040);
				fontSWF = new ByteArray();
				fontSWF.endian = Endian.LITTLE_ENDIAN;
				fontSWF.writeUTFBytes('FWS');
				fontSWF.writeByte(9);
				fontSWF.writeUnsignedInt(tempData.length + 8);
				fontSWF.writeBytes(tempData);
				this._libLoader = new Loader();
				this._libLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, this.handler_libComplete);
				context = new LoaderContext();
				
				if ('allowLoadBytesCodeExecution' in context) { // AIR compatibility
					context['allowLoadBytesCodeExecution'] = true;
				}
				
				this._libLoader.loadBytes(fontSWF, context);
			} else {
				if (delayed) {
					this._libLoader = new Loader();
					this._libLoader.addEventListener(Event.ENTER_FRAME, this.handler_delayedComplete);
				} else {
					this.close();
					super.dispatchEvent(new Event(Event.COMPLETE));
				}
			}			
		}
		
		/**
		 * @private
		 */
		private function handler_delayedComplete(event:Event):void {
			this._libLoader.removeEventListener(Event.ENTER_FRAME, this.handler_delayedComplete);
			this._libLoader = null;
			this.close();
			super.dispatchEvent(new Event(Event.COMPLETE));
		}
		
		/**
		 * @private
		 */
		private function handler_delayedVerifyError(event:Event):void {
			this._libLoader.removeEventListener(Event.ENTER_FRAME, this.handler_delayedVerifyError);
			this._libLoader = null;
			this.close();
			super.dispatchEvent(new IOErrorEvent(IOErrorEvent.VERIFY_ERROR));
		}

		/**
		 * @private
		 */
		private function handler_complete(event:Event):void {
			this.analyze(this._loader.data as ByteArray);
		}
		
		/**
		 * @private
		 */
		private function handler_libComplete(event:Event):void {
			var id:String;
			var i:uint;
			var fontClass:Class;
			var font:Font;
			var domain:ApplicationDomain = this._libLoader.contentLoaderInfo.applicationDomain;
			
			for (i = 0;i < this._fontCount;i++) {
				id = i.toString();
				while (id.length < 3) id = '0' + id;
				id = FontLoader.CLASS_NAME_PREFIX + id;
				
				if (domain.hasDefinition(id)) {
					fontClass = domain.getDefinition(id) as Class;
					font = new fontClass() as Font;
					
					if (font && font.fontName) { // Skip static fonts
						this._fonts.push(font);
						if (this._autoRegister) Font.registerFont(fontClass);
					}
				}
			}

			this.close();
			super.dispatchEvent(new Event(Event.COMPLETE));
		}
	}
}

import flash.utils.ByteArray;
import flash.utils.Endian;
import flash.geom.Rectangle;
	
internal class SWFByteArray extends ByteArray {
	
	/**
	 * @private
	 */
	private static const TAG_SWF:String = 'FWS';
	
	/**
	 * @private
	 */
	private static const TAG_SWF_COMPRESSED:String = 'CWS';
	
	public function SWFByteArray(data:ByteArray=null):void {
		super();
		super.endian = Endian.LITTLE_ENDIAN;
		var endian:String;
		var tag:String;
		var position:uint;
		
		if (data) {
			endian = data.endian;
			position = data.position;
			data.endian = Endian.LITTLE_ENDIAN;
			data.position = 0;
			
			if (data.bytesAvailable > 26) {
				tag = data.readUTFBytes(3);
				
				if (tag == SWFByteArray.TAG_SWF || tag == SWFByteArray.TAG_SWF_COMPRESSED) {
					this._version = data.readUnsignedByte();
					data.readUnsignedInt();
					data.readBytes(this);
					if (tag == SWFByteArray.TAG_SWF_COMPRESSED) super.uncompress();
				} else throw new ArgumentError('Error #2124: Loaded file is an unknown type.');
				
				this.readHeader();
			} else {
				throw new ArgumentError('Insufficient data.');
			}
			
			data.endian = endian;
			data.position = position;
		}
	}
		
	/**
	 * @private
	 */
	private var _bitIndex:uint;
	
	/**
	 * @private
	 */
	private var _version:uint;
	
	public function get version():uint {
		return this._version;
	}
	
	/**
	 * @private
	 */
	private var _frameRate:Number;
	
	public function get frameRate():Number {
		return this._frameRate;	
	}
	
	/**
	 * @private
	 */
	private var _rect:Rectangle;
	
	public function get rect():Rectangle {
		return this._rect;
	}

	public function writeBytesFromString(bytesHexString:String):void {
		var length:uint = bytesHexString.length;
		
		for (var i:uint = 0;i<length;i += 2) {
			var hexByte:String = bytesHexString.substr(i, 2);
			var byte:uint = parseInt(hexByte, 16);
			writeByte(byte);
		}
	}
	
	public function readRect():Rectangle {
		var pos:uint = super.position;
		var byte:uint = this[pos];
		var bits:uint = byte >> 3;
		var xMin:Number = this.readBits(bits, 5) / 20;
		var xMax:Number = this.readBits(bits) / 20;
		var yMin:Number = this.readBits(bits) / 20;
		var yMax:Number = this.readBits(bits) / 20;
		super.position = pos + Math.ceil(((bits * 4) - 3) / 8) + 1;
		return new Rectangle(xMin, yMin, xMax - xMin, yMax - yMin);
	}
	
	public function readBits(length:uint, start:int = -1):Number {
		if (start < 0) start = this._bitIndex;
		this._bitIndex = start;
		var byte:uint = this[super.position];
		var out:Number = 0;
		var shift:Number = 0;
		var currentByteBitsLeft:uint = 8 - start;
		var bitsLeft:Number = length - currentByteBitsLeft;
		
		if (bitsLeft > 0) {
			super.position++;
			out = this.readBits(bitsLeft, 0) | ((byte & ((1 << currentByteBitsLeft) - 1)) << (bitsLeft));
		} else {
			out = (byte >> (8 - length - start)) & ((1 << length) - 1);
			this._bitIndex = (start + length) % 8;
			if (start + length > 7) super.position++;
		}
		
		return out;
	}
	
	public function traceArray(array:ByteArray):String { // for debug
		var out:String = '';
		var pos:uint = array.position;
		var i:uint = 0;
		array.position = 0;

		while (array.bytesAvailable) {
			var str:String = array.readUnsignedByte().toString(16).toUpperCase();
			str = str.length < 2 ? '0'+str : str;
			out += str+' ';
		}
		
		array.position = pos;
		return out;
	}

	/**
	 * @private
	 */
	private function readFrameRate():void {
		if (this._version < 8) {
			this._frameRate = super.readUnsignedShort();
		} else {
			var fixed:Number = super.readUnsignedByte() / 0xFF;
			this._frameRate = super.readUnsignedByte() + fixed;
		}
	}
	
	/**
	 * @private
	 */
	private function readHeader():void {
		this._rect = this.readRect();
		this.readFrameRate();		
		super.readShort(); // num of frames
	}
}

  加载的swf文件,可以通过博客前面提到的两种方式生成:1。通过actionScript生成,2。通过css转换为swf

该组件均支持这两类的swf字体。。。

0
0
分享到:
评论

相关推荐

    FLEX字体助手.rar

    FLEX字体助手可以与之无缝集成,通过ActionScript代码控制字体的动态加载和解码,提供更加灵活的解决方案。 6. **性能优化**:嵌入大量字体可能导致页面加载速度变慢。FLEX字体助手允许开发者根据需求选择性地嵌入...

    Flex3.0设备字体,字体嵌入

    通过这种方法,可以将所需的字体文件编译进SWF文件中,或者在运行时动态加载到SWF文件中。这样一来,无论用户计算机上是否安装了该字体,应用程序都能正确显示文本。此外,嵌入字体还具有一些其他优点: - **抗锯齿*...

    Flex 使用中文设备字体 解决办法

    5. **应用字体**: 在文本组件上使用新定义的字体。例如: ```xml 你好,世界!" fontFamily="ChineseFont"/&gt; ``` 6. **注意事项**:在使用自定义字体时,注意版权问题,确保你有权使用这些字体。另外,过多的...

    flex开发android之加载网页

    5. 设置:提供一些设置选项,如字体大小、夜间模式等。 五、性能优化 1. 自适应布局:确保`ScalableStageWebView`能根据设备的屏幕尺寸和方向自动调整大小。 2. 页面加载优化:对大量图片或复杂JavaScript的网页,...

    Flex开发辅助工具

    通过这个工具,开发者可以直观地查看和修改组件的外观,包括颜色、字体、边框等样式属性,从而更好地定制用户界面。它允许开发者预览不同的样式设置,以便在实际项目中选择最佳方案。 2. **Charts Explorer.swf**:...

    flex 嵌入文字样式

    在这个CSS选择器中,我们把`MyCustomFont`放在字体家族的首位,如果浏览器支持并且字体文件加载成功,那么Flex项目将使用这个自定义字体。如果失败,浏览器会依次尝试后面的字体。 `demo.css`可能包含类似上述的...

    ArcGIS Flex 专题地图制作的代码与说明

    4. 加载数据:创建GraphicsLayer并加载数据,根据需要创建不同类型的图层(如等级地图、柱状图)。 5. 添加标注:利用TextSymbol创建标注,并将其添加到GraphicsLayer。 6. 实现交互:编写事件监听器,响应用户的...

    flex 使用swc 包

    3. **资源**:包括图片、字体、样式表等,这些资源可以被多个组件或类共享。 4. **元数据**:关于组件或类的元信息,例如元数据可以指定组件的外观和行为。 描述中提到的“flex3引用的swc包”,表明这是一个适用于...

    flex编译优化方法

    2. **使用系统字体替代内嵌字体**:内嵌字体会增加编译时间和项目大小,使用系统默认字体可显著减少这些影响。 3. **定期清理工程**:通过右键点击项目并选择"Clean",可以清除编译缓存,解决可能导致编译问题的...

    Flex4.0中文API

    7. 模块化开发:Flex 4.0引入了模块(Module)的概念,允许将大型应用拆分为多个独立加载的模块,从而优化加载时间和内存使用。 8. 集成开发环境(IDE):Flex Builder或Flash Builder(Flex的开发工具)在Flex 4.0...

    FLEX 系统管理器 SystemManager

    SystemManager不仅负责控制Flex应用的基本元素,如应用窗口、Application实例、弹出窗口和光标,还负责管理ApplicationDomain中的类加载和执行。下面将详细讨论SystemManager的主要功能和工作流程。 1. **应用窗口...

    flex 图片轮播效果

    在Flex中,我们可以通过加载这个XML文件,解析其内容,并将每张图片的URL绑定到一个Image组件上。同时,我们可以创建一个定时器或计时器事件,每隔一定时间自动切换图片。用户还可以通过点击左右箭头或者滑动来手动...

    flex 经典 皮肤主题

    5. `libs`:这个目录存放项目的库文件,可能包含Flex框架库和其他第三方库。 6. `src`:源代码目录,包含ActionScript和MXML文件,这是构建Flex应用程序的主要部分。 六、自定义和应用皮肤 要应用或修改经典的皮肤...

    MapABC Flex4 Demo

    3. CSS样式表:用于定义应用的视觉风格,包括地图组件的外观以及整个界面的颜色、字体等。 4. 图标和资源文件:可能包含了地图上的图标、标注图片以及其他视觉元素。 5. XML配置文件:可能包含了地图服务的配置信息...

    Flex tree的用法

    - **延迟加载**: 对于深层次的树,可以使用延迟加载策略,只在需要时加载子节点。 6. **Flex Tree的其他功能** - **拖放操作**: Tree支持拖放功能,允许用户重新排列节点或从其他来源导入数据。 - **多选模式**:...

    Flash(Flex)反编译及修改

    SWF文件是Flash Player理解和执行的二进制格式,包含了动画、音频、视频、字体和其他互动元素。它不包含原始的ActionScript代码,而是包含了经过优化和编译的指令。 3. **反编译工具**: 如描述中提到的"JPEXS Free...

    三个Flex的皮肤

    这些皮肤可能包括颜色、字体、边框、按钮样式、滑块样式等各种元素的差异,为Flex应用程序提供多样化的外观。 描述中提到的"三款漂亮的Flex的皮肤主题"意味着我们可以期待三个美观的设计,它们可能各有特色,适合...

    flex-iframe-1.4.6

    开发者可以使用这些类在Flex应用中动态加载和控制iframe的内容。 2. **示例或演示**:为了帮助用户理解和使用这个库,可能包含了一些示例Flex项目,这些项目展示了如何在实际应用中嵌入和操作iframe。 3. **文档**...

    flex_tree扩展_时间轴

    此外,由于引用了特定的字体,最终的编译文件尺寸较大,这可能会对加载速度和用户体验产生影响。不过,如果去除这些字体引用,文件大小可以显著减小,对性能的提升有积极意义。 在"TimerAxis"这个压缩包文件中,很...

    Flex启动与初始化

    它不仅控制 swf 的加载和启动,还划分 Flex 工程显示层级,保存嵌入字体和样式,监视 swf 画布大小等顶级功能。 SystemManager 是顶级显示层的管理器,凡是父级为 SystemManager 的显示层都是顶级显示层。应用程序...

Global site tag (gtag.js) - Google Analytics