Fluid idea for Life

随笔,杂记

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代码能做出什么?
下一篇: AS pdfBox 0.1

访客评论

  1. #1 walktree 2011-04-18, 1:47 PM
    其实给我发邮件更方便点,或者加Gtalk
  2. #2 walktree 2011-04-18, 1:41 PM
    @yangjie,不能,需要你自己去研究,代码仅供参考,至于功能上面已经说得很清楚了,具体也可以看代码,或者直接去看pdfBox项目的代码。
  3. #3 yangjie 2011-04-18, 11:39 AM
    这个软件能把任何pdf文件的文字抽出来吗,然后再用as编一个新的软件
  4. #4 yangjie 2011-04-15, 8:30 AM
    您的qq是多少,能加您吗,这么打字太麻烦了
  5. #5 walktree 2011-04-13, 2:09 PM
    @yangjie,不敢当了,如果有兴趣,你可以研究这个项目的代码,有问题可以问,我一定知无不言
  6. #6 yangjie 2011-04-12, 11:53 AM
    我能当您的学生,拜在您门下吗
  7. #7 walktree 2011-04-02, 9:44 PM
    @yangjie,太花时间了,可能以后还会继续
  8. #8 yangjie 2011-03-28, 8:15 PM
    您为什么要停止这项计划呢,这很有前途啊
  9. #9 walktree 2010-06-24, 9:02 AM
    很抱歉,这个项目目前已停止开发了。
  10. #10 Terry 2010-06-20, 1:50 PM
    进展如何??
Total: 26Page 1 of 3123Next ›

发表评论

评论内容:

点击获得Trackback地址