开始整SWF文字高亮显示——第一步:解析PDFToFlex源文件(修改补充版)
為了深入實現(xiàn)PDF轉成SWF后的關鍵字高亮顯示的問題,我需要解析PDFToFlex源文件,已經(jīng)看到Flex 的新類:flash.net.URLStream? 和 flash.utils.endian,我會全面學習我遇到的新類的。本來當天晚上就準備把分析的成果與大家分享的,后來忙別的,就沒有寫博客,所以之后看過我這篇隨筆的網(wǎng)友可能會很郁悶“干嘛說寫不寫,不忽悠人行不?!”
????? 首先說,加載SWF使用的loader對象,為啥不使用SWFLoader對象?詳細看到前篇我轉載的Igor Costa的文章就知道了“After that you might be think it’s simple we can load it using SWFLoader, but you will have problems to control and Flex will understand that this file is just as asset not as a component. To work with that, you have various options like, Loader, ByteLoader, ModuleLoader and BulkLoader. ”翻譯過來大意為:SWFLoader是簡單方便使用,但是SWF文件被加載進來是被作為元件使用而不是組件,這就很難對SWF內(nèi)部進行操作。為了解決操作SWF的問題,可以使用?Loader, ByteLoader, ModuleLoader and BulkLoader。SWFLoader加載進的SWF或圖片是作為一個整體使用的。
??????其次,開始解析類ForcibleLoader.as,這個類主要是URLStream以ByteArray形式加載SWF,進行解壓出來,并進行解析SWF版本,針對不同的Flash版本繪制問題而進行必要的Byte級別的修改。Igor Costa的原話為“?but what about Flex to control from Flash 5,6,7,8, both have their own way of render and work.To accomplished that I googled a little, because I knew it that some one should have fight this problem before and for lucky I found this class that kick ass problem. ”結合該類的功能,就不難看懂代碼啦。
???? 1.flash.net.URLStream,URLStream類提供對下載 URL 的低級訪問。數(shù)據(jù)一下載,便可隨即為應用程序使用,這和使用 URLLoader 時需要等到整個文件下載完不同。并且URLStream類還允許在完成下載前關閉流。已下載文件的內(nèi)容將作為原始二進制數(shù)據(jù)提供。在URLStream中的讀取操作是非阻塞模式的。這意味著您在讀取數(shù)據(jù)之前必須使用 bytesAvailable 屬性來確定是否能夠獲得足夠的數(shù)據(jù)。如果不能獲得足夠的數(shù)據(jù),將引發(fā) EOFError 異常。Endian屬性,在默認情況下,所有二進制數(shù)據(jù)都是以 Big-endian 格式編碼的,并且最高位字節(jié)于第一位。
????“?var inputBytes:ByteArray = new ByteArray();???_stream.readBytes(inputBytes);???_stream.close();?”?readBytes()方法:這些字節(jié)會被讀取到由 bytes 指定的 ByteArray 對象中。
???? 2.flash.utils.Endian,也是我沒見過的,這類很簡單,充當枚舉數(shù)組的作用,由于它繼承自Object,它就具備了一些基本方法和屬性。它自身的常量有兩個:BIG_ENDIAN: String = "bigEndian"指示多字節(jié)數(shù)字的最高有效字節(jié)位于字節(jié)序列的最前面;LITTLE_ENDIAN : String = "littleEndian" 指示多字節(jié)數(shù)字的最低有效字節(jié)位于字節(jié)序列的最前面。“inputBytes.endian = Endian.LITTLE_ENDIAN;”一句話,就是調(diào)節(jié)ByteArray中字節(jié)序列的。ByteArray中默認以 Big-endian 格式編碼的,并且最高位字節(jié)于第一位。
?????3.isCompressed()方法讀取inputBytes的首位,判斷轉換出的SWF是否是壓縮格式。uncompress(bytes:ByteArray)解壓SWF,其中用到ByteArray中的writeBytes、uncompress方法。uncompress方法采用了FlashPlayer默認zlib算法。
?
轉載于:https://www.cnblogs.com/wuhenke/archive/2009/11/13/1602339.html
總結
以上是生活随笔為你收集整理的开始整SWF文字高亮显示——第一步:解析PDFToFlex源文件(修改补充版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国标100寸和100英寸电视机区别?
- 下一篇: 好听的男孩子名字大全