一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

關于openoffice/libreoffice+swftools+jodconverter+flexpaper預覽文件的一些問題

 WindySky 2016-09-20

關于文件預覽,網(wǎng)上比較流行的方案是:

openoffice/libreoffice+swftools+jodconverter+flexpaper(跨平臺)

1.我用的是libreoffice,

因為最開始我用的是openoffice,

但是發(fā)現(xiàn)openoffice有的格式轉換不出來,而且有些復雜的word也轉不成功(不報錯,也沒日志,就是沒反應,這點很惱火,查了好久),

還有ppt,word的一些圖表轉換不出來,比如柱狀圖什么的

后來改用libreoffice就好了,格式也比較準確

轉換的時候不要忘了開啟服務,

D:\LibreOffice 4\program\soffice.exe -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

linux下是:

./soffice  --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &

注意不要忘了后面的符號

2.swftools

轉換命令sourcePath -o targetPath -T 9 -f 

sourcePath是你要轉換的文件,targetPath是要轉換成的swf文件,-T 9 是轉成9.0版本,這個版本支持分頁加載(分頁加載自己查吧)

-f具體忘了,好像是轉換所有字符,如果不加這參數(shù),再用flexpaper搜索功能的時候有些功能會不正常(比如高亮顯示) 


如果在轉換中遇到找不到F0類似的錯誤,這個是因為字體的問題,具體解決辦法如下(以下資源比較好找,不寫地址了):

首先下載xpdf-chinese-simplified.tar.gz,解壓到xpdf目錄下

下載gkai00mp.ttf和gbsn00lp.ttf兩個字體拷貝到xpdf-chinese-simplified/CMap下

更改xpdf-chinese-simplified/add-to-xpdfrc這個文件,替換成以下內(nèi)容:


#----- begin Chinese Simplified support package (2011-sep-02)cidToUnicode    Adobe-GB1       xpdf安裝目錄/xpdf-chinese-simplified/Adobe-GB1.cidToUnicodeunicodeMap      ISO-2022-CN     xpdf安裝目錄/xpdf-chinese-simplified/ISO-2022-CN.unicodeMapunicodeMap      EUC-CN          xpdf安裝目錄/xpdf-chinese-simplified/EUC-CN.unicodeMapunicodeMap      GBK             xpdf安裝目錄/xpdf-chinese-simplified/GBK.unicodeMapcMapDir         Adobe-GB1       xpdf安裝目錄/xpdf-chinese-simplified/CMaptoUnicodeDir                    xpdf安裝目錄/xpdf-chinese-simplified/CMapdisplayCIDFontTT    Adobe-GB1   xpdf安裝目錄/xpdf-chinese-simplified/CMap/gkai00mp.ttfdisplayCIDFontTT    Adobe-GB1   xpdf安裝目錄/xpdf-chinese-simplified/CMap/gbsn00lp.ttf#fontFileCC     Adobe-GB1       /usr/..../gkai00mp.ttf#----- end Chinese Simplified support package

此時再用轉換命令的時候,需要指定語言包:
pdf2swf preview.pdf -o preview.swf -s languagedir=<span style="font-family: Arial, Helvetica, sans-serif;">xpdf安裝目錄/</span>xpdf-chinese-simplified -T 9 -f


3.jodconverter

我用的是jodconverter2.2.2,為什么用這個版本?因為這個版本之下的不能轉換2007以上的office,而最新版的3.0(3.0還是3.3來著忘了)轉換有bug

我轉換的時候最開始用的就是最新版,結果我一個5m左右的2010word一直轉換不成功,也沒報錯信息,就是上面openoffice那個情況,因為不確定是哪個原因所有寫上面了

如果是maven項目的話:

<dependency>            <groupId>com.artofsolving</groupId>            <artifactId>jodconverter</artifactId>            <version>2.2.2</version>            <exclusions>                <exclusion>                    <groupId>org.slf4j</groupId>                    <artifactId>slf4j-api</artifactId>                </exclusion>            </exclusions>        </dependency>
這個包和slf4j有沖突,所有剔除下

4.還有就是flexpaper了

我的版本是flexpaper2.2.4,獲取flexpaper對象的方法是$FlexPaper('documentViewer'),documentView就是你的div的id

調用flexpaper的方法當然就是$FlexPaper('documentViewer').getTotalPages()了

如果flexpaper加載時間較長,這時候就需要用到事件了,比如ondocumentloaded(文檔加載完成),直接這樣:

jQuery(function() {    jQuery('#documentViewer').bind('onExternalLinkClicked',function(e,link){//do something});    jQuery('#documentViewer').bind('onProgress',function(e,loadedBytes,totalBytes){//do something});    jQuery('#documentViewer').bind('onDocumentLoading',function(e){//do something});    jQuery('#documentViewer').bind('onPageLoading',function(e,pageNumber){//do something});    jQuery('#documentViewer').bind('onCurrentPageChanged',function(e,pagenum){//do something});    jQuery('#documentViewer').bind('onDocumentLoaded',function(e,totalPages){//do something});    jQuery('#documentViewer').bind('onPageLoaded',function(e,pageNumber){//do something});    jQuery('#documentViewer').bind('onErrorLoadingPage',function(e,pageNumber){//do something});    jQuery('#documentViewer').bind('onDocumentLoadedError',function(e,errMessage){//do something});    jQuery('#documentViewer').bind('onDocumentPrinted',function(e){//do something});});
我的版本里是有這么多事件,具體什么用,自己翻譯吧~

flexpaper要瀏覽的文件需要放在web環(huán)境下,path要寫相對路徑(因為它不支持絕對路徑,不清楚為什么,反正我是沒找到合適的答案)

如果你覺得麻煩,那它還支持流的方式加載swf,你可以再swfFile這里直接寫上你的處理路徑,比如/doc/preview,然后后臺直接用response寫回來就行了

flexpaper在加載大文檔的時候會拖垮瀏覽器,比如我遇到個307頁的pptx(據(jù)說pptx相對于ppt會小很多,應該是壓縮比較厲害)才4m多,轉換時間就不必說了,無法避免的(建議只轉pdf,雖然可以直接轉html和swf但是轉swf很慢,轉html的話文件會很大,我轉一個4.8m的docx轉完事40m,當然和我里面貼圖多也有關系,并且有時候會出現(xiàn)卡死不斷開soffice連接的問題,pdf最穩(wěn)定,非要轉html的話可以先轉pdf然后用pdf2htmlex這個神器轉換).所以后來就改成分頁加載的方式了(主要當初沒想到這種大文檔會這么多),普通的分頁加載方式就不多說了,網(wǎng)上有很多,而我采用的是流的方式,所以只能找怎么用流分頁加載了.(廢話好多,哈哈)

網(wǎng)上沒合適的答案,自己摸索出flexpaper流的方式分頁加載方法具體可以這么寫

SWFFile:"{/doc_layout/preview_office$!{docFile.id}?pageNum=[*,0],$!{pageNumCount}}"
我用的velocity,這個字符串里的id就是我的業(yè)務id,pageNumCount是flash頁數(shù),頁數(shù)的獲取可以用itext這個jar獲取pdf的頁數(shù)(poi獲取office頁數(shù)不準,除非用openoffice).我們的文件都有個唯一的key,轉換文件的時候就是原文件名加下劃線加頁碼,所以我的辦法是直接獲取以這個key開頭并以.swf結尾的文件的個數(shù),代碼如下:

int pageNumCount = new File(path).getParentFile().list(new FilenameFilter() {                            @Override                            public boolean accept(File dir, String name) {                                return name.startsWith(docFileKey.substring(0, docFileKey.lastIndexOf("."))) && name.endsWith(".swf");                            }                        }).length;
pageNum是自己隨便取,是要加載的頁碼,就當一個普通參數(shù)就行,但是[*,0]這個一定要這么寫,逗號后沒有空格,之后就是根據(jù)傳到后臺的頁碼自己決定加載哪頁flash吧,







    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲一二三四区免费视频| 亚洲最新的黄色录像在线| 色无极东京热男人的天堂| 成人精品一区二区三区综合| 亚洲中文字幕高清乱码毛片| 国产香蕉国产精品偷在线观看| 中文字幕日产乱码一区二区| 台湾综合熟女一区二区| 五月情婷婷综合激情综合狠狠| 偷拍洗澡一区二区三区| 99日韩在线视频精品免费| 免费一区二区三区少妇| 91精品国产品国语在线不卡| 日韩精品一区二区三区四区| 亚洲日本韩国一区二区三区| 国产成人亚洲综合色就色| 精品国产亚洲av成人一区| 激情五月激情婷婷丁香| 日韩欧美一区二区黄色| 国产成人免费激情视频| 青青免费操手机在线视频| 香港国产三级久久精品三级| 偷拍偷窥女厕一区二区视频| 超碰在线播放国产精品| 亚洲日本韩国一区二区三区| 好吊色欧美一区二区三区顽频| 中文字幕高清不卡一区| 日本乱论一区二区三区| 国产传媒精品视频一区| 亚洲精品中文字幕一二三| 综合久综合久综合久久| 国产又大又猛又粗又长又爽| 亚洲国产日韩欧美三级| 欧美欧美日韩综合一区| 日韩不卡一区二区在线| 日本午夜免费啪视频在线| 日本女人亚洲国产性高潮视频| 夜夜躁狠狠躁日日躁视频黑人| 午夜视频在线观看日韩| 久久精品国产第一区二区三区| 色综合久久中文综合网|