FlexPaper是一個開源輕量級的在瀏覽器上顯示各種文檔的組件,被設計用來與PDF2SWF一起使用, 使在Flex中顯示PDF成為可能,而這個過程並無需PDF軟體環境的支援。它可以被當做Flex的庫來使用。
另外你也可以通過將一些例如Word、PPT等文檔轉成PDF,然後實現線上瀏覽。
利用 FlexPaper 基於Flex實現,可以線上瀏覽PDF文檔,而不要PDF軟體支援。它支援的副檔名就是.swf,所以再需要一款軟體,使得PDF自動轉換為SWF格式。它就是swftools 。操作很簡單,首先第一步:下載swftoolshttp://www.swftools.org/download.htm安裝後可以先試下裡面的命令C:\SWFTools\pdf2swf Paper3.pdf -o Paper3.swf 當然安裝目錄自己指定,Papaer3.pdf也是自己指定路徑。第二步:下載http://flexpaper.devaldi.com/download/Flash版本下載完後開啟可以發現裡面有個index.html,查看內容可以得到一段script指令碼<script type="text/javascript" src="js/flexpaper_flash.js"></script> </head> <body> <div style="position:absolute;left:10px;top:10px;"> <a id="viewerPlaceHolder" style="width:680px;height:480px;display:block"></a> <script type="text/javascript"> var fp = new FlexPaperViewer('FlexPaperViewer','viewerPlaceHolder', { config : {SwfFile : escape('Paper.swf'),Scale : 0.6, ZoomTransition : 'easeOut',ZoomTime : 0.5,ZoomInterval : 0.2,FitPageOnLoad : true,FitWidthOnLoad : false,FullScreenAsMaxWindow : false,ProgressiveLoading : false,MinZoomSize : 0.2,MaxZoomSize : 5,SearchMatchAll : false,InitViewMode : 'Portrait',PrintPaperAsBitmap : false,ViewModeToolsVisible : true,ZoomToolsVisible : true,NavToolsVisible : true,CursorToolsVisible : true,SearchToolsVisible : true, localeChain: 'en_US'}}); </script> </div>參數基本可以參考英文,裡面的Paper.swf就是調用的檔案。我現在放一個自己的PDF檔案,然後運行這段程式可以看到
很簡單的,如果沒有負載檔案,那麼就是要到http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065將檔案添加為信任才行。
一. 使用PDF2SWF準備好你的文檔
首先要將PDF轉成SWF,這步可以使用開源的SwfTools自動完成
1.下載安裝 SwfTools,當前最新版本是0.9
2. 轉換PDF到SWF,可以通過命令列的方式,例如將Paper3.pdf轉換成Paper3.swf
C:\SWFTools\pdf2swf Paper3.pdf -o Paper3.swf
二. 使用已經編譯好的FlexPaper的flash版本瀏覽你的文檔
- 下載並解壓出已經編譯好的FlexPaper
- zip檔案包含一個例子檔案叫做FlexPaperViewer.html,它向你展示了需要傳給FlexPaper的 基本參數
var params = {
SwfFile : "Paper.swf",
Scale : 0.6
}
swfobject.embedSWF("FlexPaperViewer.swf","cb","500","500","9.0.0","js/swfobject/expressInstall.swf", params);//SwfFile參數是你想顯示的檔案,Scale是0-1之間的數,表示顯示的放大參數
- 複製你建立出來的swf和PDF2SWF到解壓縮出的相同目錄
- 確定你添加了FlexPaperViewer.swf
三. 在Flex中使用FlexPaper
1. 下載FlexPaper SWC,添加到你的Flex項目libs中
2. 複製你用PDF2SWF建立的SWF到你的bin-debug目錄,如Paper3.swf,添加FlexPaper組 件到你的flex代碼中Xml代碼
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
width="800" height="500"
xmlns:flexpaper="com.devaldi.controls.flexpaper.*">
<flexpaper:FlexPaperViewer width="800" height="500"
Scale="1" SwfFile="Paper3.swf" />
</mx:Application>
網友寫的一個方法可以利用JAVA轉化pdf為swf:
/** * 將pdf檔案轉化成swf檔案 * @param fileName 檔案的絕對路徑 * @param destPath 目標路徑 * @return -1:源檔案不存在,-2:格式不正確,-3:發生異常,0:轉化成功 * @author fanglm created on Jul 9, 2010 1:13:04 PM */public static int ConvertPdfToSwf(String fileName,String destPath){String destName = "",fileExt = "";StringBuffer command = new StringBuffer();fileExt = fileName.split("//.")[fileName.split("//.").length-1].toLowerCase();try{File file = new File(fileName);if(!file.exists()){//判斷源檔案是否存在return -1;}else if(!fileExt.equals("pdf")){//判斷檔案是否是pdf格式的檔案return -2;}else{String swftoolsPath = "D://SWFTools";//擷取pdf轉swf工具的路徑if(!swftoolsPath.substring(swftoolsPath.length()-1, swftoolsPath.length()).equals("//")){swftoolsPath = swftoolsPath+"//"; //在目錄後加 "/"}if(!destPath.substring(destPath.length()-1, destPath.length()).equals("//")){destPath = destPath+"//"; //在目錄後加 "/"}File destFile = new File(destPath);if(!destFile.exists()){//目標檔案路徑如果不存在,則建立目錄destFile.mkdirs();}destName = file.getName().substring(0, file.getName().length()-4)+".swf";//目標檔案名稱command.append(swftoolsPath).append("pdf2swf.exe ").append(fileName).append(" -o ").append(destPath).append(destName);Process pro = Runtime.getRuntime().exec(command.toString());BufferedReader buffer = new BufferedReader(new InputStreamReader(pro.getInputStream()));while(buffer.readLine()!=null);return pro.exitValue();}}catch (Exception e){e.printStackTrace();return -3;}}
如果遇到PDF2SWF轉換隻有一頁的PDF文檔,在FlexPaper不顯示,在執行的命令後面加上“-T 9”轉換成flash 9 格式即可解決。