天天看點

flexpaper實作文檔的線上預覽

在把文檔的格式轉換成swf格式以後,現在該實作線上的預覽。 線上預覽的方法有兩種方式。 第一種: 通過flashpaper實作文檔的線上預覽。第二種是通過flexpaper實作文檔的線上預覽。 在部落格中用到的是第二種方法。 在這裡我們來了解一下是什麼是flexpaper。

     1  Flexpaper的簡介

     FlexPaper是一個被設計用來與PDF2SWF一起使用,開源輕量級的在浏覽器上顯示各種文檔的元件, 使在Flex中顯示PDF成為可能,而這個過程并無需PDF軟體環境的支援。它可以被當做Flex的庫來使用。也可以通過将一些例如Word、PPT等文檔轉成PDF,然後實作線上浏覽。

      本文用到的flexpaper的版本是:FlexPaper_1.4.5_flash,

     下載下傳的位址:http://download.csdn.net/download/yali1990515/4443796

      下載下傳之後直接加壓就可以了,下面是解壓之後的檔案截圖:

flexpaper實作文檔的線上預覽

      主要檔案,檔案夾說明:

  • examples檔案夾:存放FlexPaper使用的例子
  • js檔案夾:存放FlexPaper調用的js檔案
  • php檔案夾:存放php使用FlexPaper的例子
  • index.html:例子首頁
  • FlexPaperViewer.swf:FlexPaper的核心檔案
  • playerProductInstall.swf:如果用戶端浏覽器的flashplayer版本過低,将嵌入此swf檔案

        2 Flexpaper的參數含義

  • SwfFile (String)需要使用Flexpaper打開的文檔

    Scale (Number)初始化縮放比例,參數值應該是大于零的整數

    ZoomTransition (String) Flexpaper中縮放樣式,它使用和Tweener一樣的樣式,預設參數值為easeOut.其他可選值包括: easenone, easeout, linear, easeoutquad

    ZoomTime (Number)從一個縮放比例變為另外一個縮放比例需要花費的時間,該參數值應該為0或更大。

    ZoomInterval (Number)縮放比例之間間隔,預設值為0.1,該值為正數。

    FitPageOnLoad (Boolean)初始化得時候自适應頁面,與使用工具欄上的适應頁面按鈕同樣的效果。

    FitWidthOnLoad (Boolean)初始化的時候自适應頁面寬度,與工具欄上的适應寬度按鈕同樣的效果。

    localeChain (String)設定地區(語言),目前支援以下語言。

        en_US (English)

        fr_FR (French)

        zh_CN (Chinese, Simple)

        es_ES (Spanish)

        pt_BR (Brazilian Portugese)

        ru_RU (Russian)

        fi_FN (Finnish)

        de_DE (German)

        nl_NL (Netherlands)

        tr_TR (Turkish)

        se_SE (Swedish)

        pt_PT (Portugese)

        el_EL (Greek)

        da_DN (Danish)

        cz_CS (Czech)

        it_IT (Italian)

        pl_PL (Polish)

        pv_FN (Finnish)

        hu_HU (Hungarian)

    FullScreenAsMaxWindow (Boolean)當設定為true的時候,單擊全屏按鈕會打開一個flexpaper最大化的新視窗而不是全屏,當由于flash播放器因為安全而禁止全屏,而使用flexpaper作為獨立的flash播放器的時候設定為true是個優先選擇。

    ProgressiveLoading (Boolean)當設定為true的時候,展示文檔時不會加載完整個文檔,而是逐漸加載,但是需要将文檔轉化為9以上的flash版本(使用pdf2swf的時候使用-T 9 标簽)。

    MaxZoomSize (Number)設定最大的縮放比例。

    MinZoomSize (Number)最小的縮放比例。

    SearchMatchAll (Boolean)設定為true的時候,單擊搜尋所有符合條件的地方高亮顯示。

    InitViewMode (String)設定啟動模式如"Portrait" or "TwoPage".

    ViewModeToolsVisible (Boolean)工具欄上是否顯示樣式選擇框。

    ZoomToolsVisible (Boolean)工具欄上是否顯示縮放工具。

    NavToolsVisible (Boolean)工具欄上是否顯示導航工具。

    CursorToolsVisible (Boolean)工具欄上是否顯示光标工具。

    SearchToolsVisible (Boolean)工具欄上是否顯示搜尋

                                                                                                      3 flexpaper的使用例子          [html]  view plain copy print ?

  1. <span style="color:#009900;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3.     String path = request.getContextPath();  
  4.     String basePath = request.getScheme() + "://"  
  5.             + request.getServerName() + ":" + request.getServerPort()  
  6.             + path + "/";  
  7. %>  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.     <head>  
  11.         <title>文檔顯示頁面</title>  
  12.         <meta http-equiv="pragma" content="no-cache">  
  13.         <meta http-equiv="cache-control" content="no-cache">  
  14.         <meta http-equiv="expires" content="0">  
  15.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  16.         <meta http-equiv="description" content="This is my page">  
  17.         <!-- 
  18.     <link rel="stylesheet" type="text/css" href="styles.css" target="_blank" rel="external nofollow" > 
  19.     -->  
  20.         <style type="text/css" media="screen">  
  21. html,body {  
  22.     height: 100%;  
  23. }  
  24. body {  
  25.     margin: 0;  
  26.     padding: 0;  
  27.     overflow: auto;  
  28. }  
  29. #flashContent {  
  30.     display: none;  
  31. }  
  32. </style>  
  33.         <script type="text/javascript" src="js/flexpaper_flash.js">  
  34. </script>  
  35.     </head>  
  36.     <body>  
  37.     <div>  
  38.     <br/><Br/><br/>  
  39.     </div>  
  40.         <div style="position:absolute;left:200px;top:10px;">  
  41.             <a id="viewerPlaceHolder" style="width:650px;height:700px;display:block"></a>  
  42.             <script type="text/javascript">  
  43.                 var fp = new FlexPaperViewer(     
  44.                          'FlexPaperViewer',  
  45.                          'viewerPlaceHolder', { config : {  
  46.                          SwfFile : escape('http://localhost:8080/Test/swf/1.swf'),  
  47.                          Scale : 0.8,   
  48.                          ZoomTransition : 'easeOut',  
  49.                          ZoomTime : 0.5,  
  50.                          ZoomInterval : 0.2,  
  51.                          FitPageOnLoad : true,  
  52.                          FitWidthOnLoad : false,  
  53.                          PrintEnabled : false,  
  54.                          FullScreenAsMaxWindow : false,  
  55.                          ProgressiveLoading : true,  
  56.                          MinZoomSize : 0.2,  
  57.                          MaxZoomSize : 5,  
  58.                          SearchMatchAll : false,  
  59.                          InitViewMode : 'Portrait',  
  60.                          ViewModeToolsVisible : true,  
  61.                          ZoomToolsVisible : true,  
  62.                          NavToolsVisible : true,  
  63.                          CursorToolsVisible : true,  
  64.                          SearchToolsVisible : true,  
  65.                          localeChain: 'zh_CN'  
  66.                          }});  
  67.             </script>  
  68.         </div>  
  69.     </body>  
  70. </html></span>  

           在這裡的測試的時候把頁面建在了于flexpaper的根目錄下,這樣隻是為了友善測試,不是一定要放在同一個目錄下。下面是檔案放在的位置和效果預覽圖。          

flexpaper實作文檔的線上預覽

           效果圖:            

flexpaper實作文檔的線上預覽

在顯示的時候發現pdf轉換swf格式的檔案出現了亂碼的問題,在這裡總結一下出現的問題。

        第一個 : 在網頁上顯示資源時無法顯示。如圖:

flexpaper實作文檔的線上預覽

         分析原因 :

              出現這種情況分為三種情況。第一種情況是在播放官方的swf的檔案,這樣的情況的原因是沒有得到官方的信任。在官方添加信任就好。具體操作如下:

             進入官網,網址如下:http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065

  為FlexPaper添加信任.進入網頁之後 ,點選左邊的 Global Security Settings papel 這個選項,然後在右邊(如下圖)

flexpaper實作文檔的線上預覽

           第二種情況 ; 可以加載官方的案例,可是無法加載自己的資源 

         當我們想要FlexPaper加載我們自己的swf時,發現一直處于等待狀态,無法顯示,檢查swf的路徑也沒錯,但就是一直無法加載。這種情況,很有可能就是.swf檔案的版本問題啦。我們運作SWFTools的圖形工具(gpdf2swf.exe)把pdf轉換為swf,但是轉換後的swf也不能被Flexpaper正常加載,如果你確定路徑沒錯的話,那就是版本的問題啦。

我們可以檢視轉換時swf的版本,我們可以點選 Edit->Options->Viewer:

flexpaper實作文檔的線上預覽

可以看到它幫我們轉換為SWF的版本有 7,8兩項,但這都是不能正常在FlexPaper中加載的,我們必須把pdf轉換為版本為9的swf,才能讓它在Flexpaper中顯示。那麼如何轉換為9的呢?我自己是使用cmd指令行工具來手工轉換的.隻須在指令行添加 "-s flashversion=9" 這句,就可以轉換為9的版本啦.示例如下:

flexpaper實作文檔的線上預覽

參數說明如下:

(SWFTools我的預設安裝路徑是: E:\Program Files\)

SWFTools:pdf2swf.exe工具所在的檔案夾,

-t: 源檔案路徑,即待轉換的pdf檔案路徑。

-s: 設定參數,這裡我們設定為 flashversion=9 ,即可以轉換為9 的版本啦。

-o: 輸出檔案的路徑,這裡我輸出到F:盤下

好了,這樣就轉換成功啦,你就可以得到一個.swf的檔案,你隻需拷到你下載下傳的Demo裡,配置好路徑後,你就會發現FlexPaper可以正常加載你的swf啦.

在這裡稍微強調一個小問題:檔案夾名字帶有空格

對于 -t ,-o 這兩個參數,就是對于源檔案路徑來輸出檔案路徑的問題,如果你的檔案夾的名字中,有空格的話,這樣是不能找到你的檔案的。

比如說:我要轉換的pdf源檔案在 E:\Program Files\SWFTools\這個檔案夾下,當我這樣寫 -t E:\Program Files\SWFTools\ajax.pdf 或者是輸出檔案路徑寫成這樣 - o E:\Program Files\SWFTools\ajax.swf  這樣都是不能成功的,因為這裡面有檔案夾名含有空格,這應該是cmd指令的問題(這個我也不是很懂,希望有高手能說一下),這裡你隻有在路徑的前後加上又引号就能成功啦,如: -t "E:\Program Files\SWFTools\ajax.pdf" 或  -o "E:\Program Files\SWFTools\ajax.swf" 這樣就OK啦.

             第三種情況:  可以加載資源可是無法播放。分析思路

          第一:确定一下你傳遞的資源的字尾名是否正确,因為flexpaper 隻能播放字尾名為swf的檔案。

          第二: 檢視檔案的路徑是否正确,如果在jsp頁面中,必須檢視傳遞的資源路徑是否存在亂碼。

          二 中文亂碼的問題

            出現中文亂碼的一般在txt格式轉換成pdf格式的過程中還有就是在pdf轉換成swf格式的時候出現。

            在這裡先說第一種txt格式轉換。在進行文本文檔的轉換時,進行一個中間過渡。可以先把txt轉換成odt檔案,之後轉換成pdf格式就不會出現亂碼。 具體的步驟在

仿百度文庫解決方案(三)- 利用JODConverter把文檔轉換成pdf格式

               在pdf轉換swf格式的出現的亂碼比較容易解決。隻需要幾個代碼修改一下就好了具體步驟如下:

在轉換中,我發現有些中文PDF檔案轉換後會出現亂碼的現象,是以這裡還要處理一下亂碼的問題。看到上面代碼中紅色的一段了嗎?這就是解決亂碼的方法。這個方法是參考了http://hi.baidu.com/xwx520/blog/item/1d0c423885b392fab311c72e.html這篇文章,感謝作者。

1.下載下傳XPDF:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz,并解壓到xpdf-chinese-simplified目錄下。

2.下載下傳字型:http://blog.pjoke.com/wp-content/uploads/2009/02/font.zip,并解壓到xpdf-chinese-simplified/CMap目錄下。

3.修改xpdf-chinese-simplified目錄下的add-to-xpdfrc檔案。将裡面的路徑設為自己的路徑:

flexpaper實作文檔的線上預覽

4 之後在調用pdf2swf指令時後面加上“

  1. -s languagedir=D:\\xpdf-chinese-simplified";  

”就可以了。