文檔在線預覽研究系列
利用百度閱讀器
html
近兩年出現了許多以「經驗交易」爲核心的文檔平臺,如豆丁網、百度文庫、星期八等網站。這些網站將文檔(知識)存放在網站(平臺)上,供用戶瀏覽、討論、下載,配以良好的積分體系和金錢激勵(運營),完美的協調好知識分享與知識傳播之間的微妙關係。這樣即有Web2.0的用戶互動,也有Web3.0的價值分配,對社會也是很是好的資源重用,是很是棒的一種運營模式。算法
從技術層面講,這類網站的創新主要有文檔預覽、知識商城和SNS三個塊。今年初公司也決定在公司內部引入這種模式,以實現公司內部文檔特別是售前方案的分享,很榮幸,我被安排爲此項目的開發經理,也專門研究了文檔在線預覽的技術。現在項目已經上線將近百天,也是時候整理一下思路,這篇博客主要就是分析一些文檔在線預覽的技術細節,其實網上已經有不少相似的文章,但大多沒有說得很清楚,也比較零亂,因此我想整理一個完整的文章來。文章內容將會涉及: 整體思路、預覽實現細節、縮略圖實現、百度閱讀器使用等。安全
文檔預覽即文檔以flash的形式在網頁上展現,因此要解決兩個問題: 以什麼格式展現flash、文檔如何轉化爲符合格式的flash。 工具
展現flash有兩種方式,一種是直接生成好一個完整的flash展現出來,一種是用一個播放器來播放另一個文檔flash。第一種方式能夠用SWFTools的工具直接將pdf轉化成一個總體的flash展現,但這種方式的flash較大,且不容易控制,故用得較少。第二種方式是重點,首先須要瞭解的是一個 開源的flexpaper播放器,它能夠播放一幀一頁的flash;在flexpaper的基礎上,若是遇到大文檔則會出現速度和性能的問題,這個時候須要像百度文庫、豆丁同樣修改flexpaper,讓它支持一次 僅讀取指定頁數的flash;若是文檔安全級別較高,不容許下載查看,則須要給flexpaper 加上加密解密算法;若是須要登陸用戶才能查看,則要讓flexpaper有 登陸UI。性能
轉化文檔爲flash的思路有一條,但有多種實現方式。 通常文檔須要先轉化爲pdf,再從pdf轉化爲flash。轉化爲pdf的方法有不少,例如使用 虛擬打印機、使用MicrosoftOffice的API、使用OpenOffice轉化等,不過轉化的過程當中,可能因爲文檔有誤、損壞、加密等緣由形成轉化失敗。從pdf轉化爲flash就簡單了許多,直接使用 SWFTools的pdf2swf便可實現多種方式的轉化。flex
下圖是文檔轉化到swf的一個流程,其中 type是文檔的一個狀態標識(0表示未處理過的文檔,1表示已生成pdf,2表示已生成flash,-1表示不受支持的文檔格式,-2表示轉化爲pdf失敗,-3表示轉化爲flash失敗) 網站