Fluid idea for Life

随笔,杂记

AS pdfBox 0.1

今天花了些时间把前面的代码整理出来,有兴趣的朋友可以下载看看。 http://code.google.com/p/as3-pdfreader/downloads/list

抽取文字的部分还在开发中,遇到一些问题,一直没有太多时间来研究。 09年,只能先把眼前最重要的事情做完,再来做自己感兴趣的东西。祝朋友们身体健康,新年有好心情!

Tags: as3 pdfReader

as3 pdf Reader

as3 pdf Reader,这是我最近在专注开发的一个开源工具库。目前Air支持动态加载pdf,但需要软件支持,使用flash是否可以加载pdf?从理论上说,使用as3解析pdf文件是可行的,不外乎分析二进制流,只不过pdf的结构要复杂一些。我有这个念头已经有一段时间了,打算花几个月的时间,实现一个类似Adobe Reader(当然功能要简单的多)的浏览器。

pdf文件的结构是一个环环相扣的树型结构,对于第一次研究文件结构的我来说,开始真被弄得很昏,好不容易才理清了中间的关系。查找资料的过程中,发现中文的资料比较少。Java、C#等有对应的开源库,看那些源代码真是件头疼的事。目前是照办了PDFBox的代码,从java搬到as,工程量很大,决非简单的重写。

解析pdf和生成pdf这件事逻辑上是可逆的,但实现起来难度却很大,我觉得读比写要困难,AlivePDF的代码对我的帮助有限。PDF文件格式标准到现在已经有多个版本,这无疑增加了解析的难度,其中文本、数据的编码方式也有很多。

不管怎样,作为自己开发的第一个有意义的开源工具库,希望能坚持下去。

开发进度: 目前已经完成了文件的二进制流解析部分,中间的过程不可谓不艰辛,但接下来的才是关键,也就是解析页面信息,分离出文字。再接下来,向更高难度挑战,包括解析图片、字体等等,道路还很曲折。

这是第一个Demo,读取了文件的基本信息:

[kml_flashembed movie="http://www.fluidea.cn/lab/pdfReader/Demo_Text.swf" height="380" width="480" /]

ps:pdf中,对文本一般采用flate编码方式压缩,刚好as3支持,省了一大笔事!!ByteArray的compress和uncompress默认使用的是zlib压缩方式,这个功能原来这么有用!最后,来一段压缩过的新年祝福: 78 DA 7B 36 6D C3 D3 9D 5B 9E EE 5F FD 64 E7 04 45 00 44 76 09 1C

var s:String = "78 DA 7B 36 6D C3 D3 9D 5B 9E EE 5F FD 64 E7 04 45 00 44 76 09 1C";
var stream:ByteArray= new ByteArray();
var arr:Array = s.split(" ");
for (var i:int = 0; i < arr.length; i++)
{
	stream.writeByte ( parseInt(arr[i], 16) );
}			
stream.uncompress();
trace(stream);

由于flash player的安全限制,可以将swf文件下载到本地运行。

Tags: as3 pdfReader

25行as代码能做出什么?

if Einstein were still alive he would be a Flash user. 老外搞的一个25行代码比赛,这里是11、12月的结果:http://www.25lines.com/?page_id=139。看看这些代码,很能开扩眼界。 效果一个比一个绝,难怪爱因斯坦也要做flash程序员了。

这里还有一个:http://www.25lines.com/finalists/0812/043.swf,非常强大!

Tags: NB

Flash右键功能测试

在网页中利用js可以实现右键功能,这个已经不是新鲜事了,http://www.uza.lt/rightclick/。最近看到eval的用法,有个想法,可以直接在as中就实现右键,把js整合进来,这样使用起来会方便很多,于是动手做了。

做的过程中,发现swf与js的通讯并不如adobe文档中说的那么完美,前天有个同事的机器上死活也跑不起来,ExternalInterface就是没用,虽然装的是XP+IE。其次,经过测试,在某些浏览器下,ExternalInterface的执行效率很低,不知道底层是如何实现的。

不管怎样,还是做了一个小样,在FF、IE和谷歌下测试通过。 查看demo 使用来很简单: import org.fluidea.utils.RightClick; //初始化并定义回调函数 RightClick.init( onRightClick );

function onRightClick(){ // } 下载:RightClick.as

不过这个功能只能在网页中用(废话),wmode参数要设置,具体参考rightClick.html。

update:修正了鼠标中键的问题

Tags: rightClick

三句笔记

1.在MXML组件如何实现接口?

这种情况比较少见,一般实现接口用类来写,但有时候偷懒希望就在MXML中搞定。MXML的本质就是as,所以可以做到,只需添加到根节点中: implements="org.fluidea.IElement"

2. 直接把swf文件中的movieclip嵌入在Flex程序中,如果有多桢动画,好象无法控制stop,play等. 解决方法是当作单个swf文件,再用loader的loadBytes方式载入,或者用adobe提供的专用工具Flex component kit,把flash中的元件转换为flex组件,或者......???

3. 网页中的swf执行javascript一法,这个是在网上看到的,觉得很有用,于是记在这里: 一句话就够了,非常强大。

ExternalInterface.call("eval", "");

Tags: Flex

近期速记

看了一段视频,很震撼:http://www.peterelst.com/blog/2008/12/12/adobe-creative-technologies-lab/,adobe的工程师真是很好很强大。

看了这个程序,我觉得自己对ajax还很无知:http://antimatter15.110mb.com/ajaxanimator,还是开源的,牛人总是做一些牛事!

前些日子研究 Text Layout Framework,结果过了几天Adobe就放出了Flash CS4版本的组件,看来是我多虑了,TextView组件很强大,Adobe网上的demo更是了得的很。

最近有一个想法很强烈,希望做一个基于Flash的真正的PDF浏览器,目前进度为1%。

wordpress又升级了,应该更新吗?不应该更新吗?应该更新吗,不应该吗......

Blog恢复

前几天Blog所在的服务器搬迁,由于是放在朋友的服务器上,结果所有文件都被弄丢了,幸好数据还在。花了半天工夫全部恢复过来,不过有部分上传的文件没有备份。 写Blog最痛苦的事莫过于数据丢失。

现在全部搬迁到自己的空间上了,用的是国外的空间,lunarpages,flex9.cn也放在上面,挺稳定的,空间也够大,N个G,用的是独立IP,自力更生了。

关于Alchemy的随想

早在2007年就有Adobe的牛人在研究如何在Flash Player 9(具体是AVM2)上跑C或C++,现在这个研究已经进入了出成果的时候,昨天还是前天在labs上放出了这个传说中的家伙名为Alchemy。 相逢不如偶遇,最近正在被Flash Player在声音采集上的限制弄得头昏。Adobe允许我们可以动态加载Mp3或Mp4,甚至编写算法播放wav(但要注意采样率必须是44100、22050、11025、5510,是不是很变态?),但如果想获取麦克风的声音数据,没门! Flash Player采用的是商业版本的Nellymoser编码算法(一个解码器好象售价$7000多),整个过程都封闭完成,开发者无法获取这些数据。Flash media server倒是可以,但只是做数据转发,任何想围绕Flash做录音相关的应用都无解。于是有很多人瞄准了Red5,事实上,强大的Red5团队也没有办法,google了一下,很多老外都对此很怒。据说国外有牛人破解了Nellymoser编码,还放到google code上,结果马上被封杀。 Flash Player 10新加了一个功能,允许选择音频编码器,除了默认的Nellymoser编码,还可以选择开源的Speex,可能是考虑到广大用户的呼声,Adobe作了一点让步。处于商业考虑,要照顾FMS,还有其它软件,Adobe真是费尽心思。 Alchemy的出现,让我稍稍激动了一下,如果可以使用C语言来截获麦克风的原始数据,或者直接访问麦克风,那不是很完美?但精打细算的Adobe应早有防范吧。

Tags: Alchemy

Flash Player 10文本试验2

[kml_flashembed movie="http://www.fluidea.cn/lab/textview/TextViewProject.swf" height="360" width="480" /]

嵌入了一个swf在里面,发现位置控制有点问题。

Tags: as3, FTE

FP 10下的图文混排

FP 10的一大特色是引入了新的文本引擎,官方上的文档称可以实现图文混排、改变输入方向、竖排等功能。

关于Flash Text Engine:http://help.adobe.com/zh_CN/ActionScript/3.0_ProgrammingAS3/WS6C0BB8ED-2805-467a-9C71-F9D757F33FB6.html

初看文本引擎的API,很多,但都是些很低层的东西,实现文本和图片的显示倒不难,但要实现一个富文本编辑器,还远远不够。为此,Adobe在文本引擎基础上又写了一个库,也就是所谓的Text Layout Framework,在opensource上发布的Flex4测试版本中,已经引入了这个库,并形成了一个新的功能强大的组件TextView(http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Text+Primitive)。

据说在Flash cs4中也会引入这个库,但很明显,adobe是不会引入新的TextView组件。为此,我花了一天时间,把这个TextView移植出来,从而可以直接用在flash项目或actionScript项目中。

[kml_flashembed movie="http://www.fluidea.cn/blog/wp-content/uploads/2008/11/flashplayer10text.swf" height="360" width="480" /]

ps,今天安装了Flash cs4,感觉不是很好,第一反应是布局全乱了,有谁知道属性面板怎样才能恢复以前的那种布局吗?Flash越来越大,很杂的感觉。

Tags: FTE