首页 > 开始整SWF文字高亮显示——第一步:解析PDFToFlex源文件(修改补充版)

开始整SWF文字高亮显示——第一步:解析PDFToFlex源文件(修改补充版)

  为了深入实现PDF转成SWF后的关键字高亮显示的问题,我需要解析PDFToFlex源文件,已经看到Flex 的新类:flash.net.URLStream  和 flash.utils.endian,我会全面学习我遇到的新类的。本来当天晚上就准备把分析的成果与大家分享的,后来忙别的,就没有写博客,所以之后看过我这篇随笔的网友可能会很郁闷“干嘛说写不写,不忽悠人行不?!”

      首先说,加载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内部进行操作。为了解决操作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 的低级访问。数据一下载,便可随即为应用程序使用,这和使用 URLLoader 时需要等到整个文件下载完不同。并且URLStream类还允许在完成下载前关闭流。已下载文件的内容将作为原始二进制数据提供。在URLStream中的读取操作是非阻塞模式的。这意味着您在读取数据之前必须使用 bytesAvailable 属性来确定是否能够获得足够的数据。如果不能获得足够的数据,将引发 EOFError 异常。Endian属性,在默认情况下,所有二进制数据都是以 Big-endian 格式编码的,并且最高位字节于第一位。

    “ var inputBytes:ByteArray = new ByteArray();   _stream.readBytes(inputBytes);   _stream.close(); ” readBytes()方法:这些字节会被读取到由 bytes 指定的 ByteArray 对象中。

     2.flash.utils.Endian,也是我没见过的,这类很简单,充当枚举数组的作用,由于它继承自Object,它就具备了一些基本方法和属性。它自身的常量有两个:BIG_ENDIAN: String = "bigEndian"指示多字节数字的最高有效字节位于字节序列的最前面;LITTLE_ENDIAN : String = "littleEndian" 指示多字节数字的最低有效字节位于字节序列的最前面。“inputBytes.endian = Endian.LITTLE_ENDIAN;”一句话,就是调节ByteArray中字节序列的。ByteArray中默认以 Big-endian 格式编码的,并且最高位字节于第一位。

     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

更多相关:

  • 字节串bytes字节串也叫字节序列,是不可变的序列,存储以字节为单位的数据字节串表示方法:b"ABCD"b"x41x42"...字节串的构造函数:bytes() 创建一个空的字节串 ,同b””bytes(整数可迭代对象) 用可迭代对象创建一个字节串bytes(整数n) 生成n个值为0的字节串bytes(字符串,encoding='...

  • Unicode编码  最初的unicode编码是固定长度的,16位,也就是2两个字节代表一个字符,这样一共可以表示65536个字符。显然,这样要表示各种语言中所有的字符是远远不够的。Unicode4.0规范考虑到了这种情况,定义了一组附加字符编码,附加字符编码采用2个16位来表示,这样最多可以定义1048576个附加字符。所以4个字节...

  • Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自【赵彦军的博客】 InputStream |__FilterInputSt...

  •   一直对编码这块晕晕乎乎,今天终于看到一篇写的很清楚也很风趣的文章,转过来mark一下。 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始...

  • 我们知道在由于大端机和小端机导致网络字节序和主机序有可能是有差异的,我们可以使用系统的ntohs,ntohl,htons和htonl这些处理函数进行转换,下面是我写的一个关于ntohs在处理小端机字节序转换的函数的简单实现. 思想大致如下: 用u_int16_t的2字节16位的整形变量来存储这个整数,首先将第一个字节和该变量进行或运算...