我在设计在线文库中的一些小记(在线文库系列一之思路篇)
闲话少叙:
在线文库的流程
一.上传文档;二.文档的在线阅读;
我估且把这个大的流程粗犷括为两点。当然其中的难点是2.文档的在线阅读。下面我将会围绕“文档的在线阅读”提出我自己的解决方案。
1、文档的在线阅读
需要有通过flash文档播放器在线来加载swf文件,然后进行在线播放。
这就要求对用户用所上传的文件要进行转换,即把doc、xls、ppt等等文件转换成flash播放器所能加载的swf文件。
在这里我向大家推荐两款好的工具;
(1)、flashpaper:借助flashpaper的虚拟打印机,我们可以把doc、xls、ppt一类的文件转换成我们想要的swf文件,同时也可以转换成pdf文件。编程方式,在服务器端安装flashpaper,然后我们在程序中通过编码来起动flashpaper进程,完成我们想要的文件转换工作。在实际编码过程中可能用遇到一些权限问题等等细节问题,相信大家少许琢磨便知一二了。
flashpaper的优点是,他把flash播放功能与所转换成的swf文件容为了一体,这样我们在展示文档的时候,操作十分简便,只需要像以往往html中插入flash一样的操作即可,由于播放功能和内容成为了一体,所以自带播放功能可以很灵活的操作内容。如果是做简单的在线文档,在线阅读的话,这个功能已经足够用了。
flashpaper的缺点是,任何东西有优点就同时也有缺点,flashpaper也不例外,由于他把播放器与内容生成为了一个整体,并且一个相当体积的doc文档只能生成一个swf文档,这样就带来了客户端加载相当慢的问题,想实现像百度文库一样的预装载效果的话,这样的操作与内容不分离的方式,在编码和操作过程中都是相当有难度的。同时flashpaper大概可能是收费吧,如果你选择商用的话,而且又不愿意花钱的话,就大可不必一条路走到黑。
小叙:有关flashpaper的使用方法,编程事例,大家可以baidu,google这两位老师会给你一个详尽的解答。
(2)、flexpaper:看完了flashpaper的优点和弊端后,我们在来看看flexpaper,做为一个开源的文档播放器,他提供给我们很大的想像空间,丰富的配置项,齐全的功能无一不是我们心中所想。下面我们就来看看flexpaper:
flexpaper同样也需要加载swf文件,同样也需要对用户所上传文件进行转换,与之配套的转换工具有pdf2swf,可惜的是,从名字上都可以看出他是用来将pdf文件转换成swf文件,那么doc、xls等等文件怎么办呢?我们还得借助其它的工具来完成doc、xls等文件到pdf的转换过程。这个过程似乎太慢长了,我从网上找了许久更好的解决方案,可是大多都是标题新颖,内容却雷同,这也感谢现在内容爬虫的威力之大啊。
flexpaper的优点:首先他是开源的,我们可以从网上找到他的源代码,可以根据自己所开发功能的实际要求对其进行二次开发,还好公司有flash方面漂亮的高手mm,这项任务我不必在过多操劳,同时flexpaper有许多属性配置项,可以让flexpaper的展示方面更为灵活。pdf2swf的工具也为我们带来了极大的好消息,他可以把文档的每一页分别转换成一个swf文件,这样就为我们实现文档预装提供了一个很好的解决方案,无论是以名字为规律来加载还是以读数据库的方式来加载,都可以实现预装载的效果,当然,我目前正在研究预装载的实现。预装载极大的提升了用户的体验度。这个方法不是唯一的,我想信总还是有更好的方法。正在发掘中。
flexpaper的缺点:这种文件转换的不灵活方式,极度让我有疯的感觉,doc、xls -> pdf ->swf ,如果繁复的转换流程,晕也,疯也,郁闷也。当然解决办法也是有的,可以借用flashpaper来把doc、xls一类的文件先转换成pdf,再由pdf2swf来将pdf文件转换成swf,当然,这些转换我们都是可以通过程序来控制的。优化文档的在物理存储,相应的就大事告成了。你怕flashpaper收费吗!这个大可不心,这种幕后的转换成pdf的过程,大可不必考虑flashpaper收费的因素,用之即可。
总述:在总结了flashpaper,flexpaper后,我的解决方案也出来了,即用flexpaper来展示我的在线文档,转换麻烦了些,但也是可以接受的。考虑到服务器性能问题,如果一个转换进程总是过多的占用服务器资源,将是一件可怕的事情。所以我在业务上加了一个小细节,就是用户所上传的文件需要通过审核,通过审核的文件将在午夜十分进行批量转换。
小弟不才,对flashpaper和flexpaper的了解还处于初级阶段,望各位前辈多多指点,砖是一定要拍的,同时大家如果发现我有不对的地方,请指正,我也期待有更好的方案出现,要不我就死定了。
北京下雪了,兔年很给力。罢了,罢了,就写到这里,我是百灵。