1. 程式人生 > >在html或asp.net中使用FlexPaper

在html或asp.net中使用FlexPaper

  網上已有很多FlexPaper仿百度文庫的一些文章,園子裡也有很多大牛的詳細教程。

  結合這次做的例子,在這裡詳細記錄一下使用Flexpaper實現仿百度文庫的效果,及自己在跟著園子裡的教程做的時候,遇到的一些小問題。希望能給初次接觸或者遇到同樣問題的同學們提供一些小小的幫助。(描述不足之處,請大家多多見諒,畢竟是第一次在園子裡寫文章)。

1.準備工作:下載FlexPaper及PDF轉換工具pdf2swf.exe

Pdf2swf工具下載:下載  (我下的是swftools-2011-01-23-1815.exe下載後,安裝)

2.執行官方的DEMO及Flexpaper的用法

 開啟剛剛下載好的Flexpaper資料夾,開啟裡面的例子 index.html,

 (1)執行官方的例子,不能載入任何的.swf(包括例子中的swf)(如果能正常顯示的話,請跳過這一步)

執行官方例子的時起,連所帶的Paper.swf都不能載入成功,只見到右上角的圈圈一直在動,處於等待的狀態。如下圖:

為你的例子所在的資料夾新增信任。然後你再執行官方的例子,就會發現可以執行成功啦。

 (2)Flexpaper的用法

 我們可以檢視index.html原始碼,這裡不多說,直接說它的用法吧:

 在前端的用法如下:

複製程式碼
<!--首先要引入jquery庫及相關的js-->
2 <script type="text/javascript" src
="js/jquery.js"></script>3 <script type="text/javascript" src="js/flexpaper_flash.js"></script>4 <script type="text/javascript" src="js/flexpaper_flash_debug.js"></script>
複製程式碼

 html中的程式碼,只需宣告一個a標籤即可

複製程式碼
<body><div style="position:absolute;left:10px;top:10px;"><a id
="viewerPlaceHolder" style="width:660px;height:480px;display:block"></a><script type="text/javascript">
var fp
=new FlexPaperViewer(
'FlexPaperViewer',
'viewerPlaceHolder',  <!--對應於a 標籤的id-->
                         { config : {
SwfFile : escape(
'ajax.swf'), <!--這句是關鍵: SwfFile: 指示匯入的.swf的路徑-->
Scale :
0.6,
ZoomTransition :
'easeOut',
ZoomTime :
0.5,
ZoomInterval :
0.2,
FitPageOnLoad :
true,
FitWidthOnLoad :
false,
PrintEnabled :
true,
FullScreenAsMaxWindow :
false,
ProgressiveLoading :
false,
MinZoomSize :
0.2,
MaxZoomSize :
5,
SearchMatchAll :
false,
InitViewMode :
'Portrait',

ViewModeToolsVisible :
true,
ZoomToolsVisible :
true,
NavToolsVisible :
true,
CursorToolsVisible :
true,
SearchToolsVisible :
true,
localeChain:
'en_US'
}});
</script></div></body>
複製程式碼

 基本上,這樣就可以在前端顯示你的Flexpaper了.

  (3)只能載入官方例子所帶的swf,但不能載入其他或自己的swf

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

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

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

引數說明如下:

(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啦.

3. Asp.net 呼叫pdf2swf.exe把PDF轉換為SWF的用法

 程式碼如下:

複製程式碼
 1 privatestaticvoid ConvertCmd(string fileName)
2 {
3 4 using (Process p =new Process())
5 {
6 string cmdStr = HttpContext.Current.Server.MapPath("~/SWFTools/pdf2swf.exe");
7 string savePath = HttpContext.Current.Server.MapPath("~/TestSWF/");
8 // @"""" 相當於一個雙引號,之所以要加@"""" 就是為了防止要轉換的過程中,資料夾名字帶有空格,導致失敗 9 string sourcePath =@""""+ savePath + fileName +@"""";
10 string targetPath =@""""+ savePath + fileName.Substring(0, fileName.LastIndexOf(".")) +".swf"+@"""";
11 string argsStr =" -t "+ sourcePath +" -s flashversion=9 -o "+ targetPath;
12 //呼叫新程序 進行轉換13 ProcessStartInfo psi =new ProcessStartInfo(cmdStr, argsStr);
14 p.StartInfo = psi;
15 p.Start();
16 p.WaitForExit();
17 }
18 }
複製程式碼

  其中,我的pdf檔案存放在~/TextSWF/資料夾下,轉換後的swf也是存放在同一資料夾下。

按照以上的做法,應該沒什麼問題,就可以做出類似於百度文庫的效果了。

另:java中呼叫exe檔案

public class transferExe {
  public static void main(String[] args) {
  openWinExe();
  openExe();
  }
  //用 Java 呼叫windows系統的exe檔案,比如notepad,calc之類
  public static void openWinExe() {
  Runtime rn = Runtime.getRuntime();
  Process p = null;
  try {
  String command = "notepad";
  p = rn.exec(command);
  } catch (Exception e) {
  System.out.println("Error win exec!");
  }
  }
  //呼叫其他的可執行檔案,例如:自己製作的exe,或是 下載 安裝的軟體.
  public static void openExe() {
  Runtime rn = Runtime.getRuntime();
  Process p = null;
  try {
  p = rn.exec("\"D:/QQ2010.exe\"");
  } catch (Exception e) {
  System.out.println("Error exec!");
  }
  }
  }

api的使用:

getDocViewer().gotoPage($('#txt_pagenum').val())

getDocViewer().loadSwf($('#txt_swffile').val())

getDocViewer().fitWidth()

getDocViewer().fitHeight()

alert('Current page:' + getDocViewer().getCurrPage())

getDocViewer().nextPage()

getDocViewer().prevPage()

getDocViewer().setZoom($('#txt_zoomfactor').val())

getDocViewer().searchText($('#txt_searchtext').val())

getDocViewer().switchMode($('#txt_viewmode').val())

getDocViewer().printPaper()

getDocViewer().highlight($('#txt_highlighturl').val())

getDocViewer().postSnapshot($('#txt_postsnapshot').val())