有時候一些資料只能給別人看,如可打印的文檔如DOC,PDF,但不能讓其他無權限的人另存或者打印,特別是web版的文件管理類的系統,總會考慮到這個問題。當用IE直接打開pdf的時候,盡管可以疲敝IE的另存為,但是點擊PDF文件的時候,再按F8的時候,PDF的閱讀器如(adobereader)會顯示ToolsBar,所以直接打開pdf貌似行不同(目前所知道的)。當時一聽到這個需求立馬就想用swing(因為我只懂一些swing),把pdf轉換成圖片,然后每一頁對應一張圖片顯示,但是馬上給否定了,第一轉換出來的圖片不清晰(我目前所了解的)而且這圖片放大縮小的效果也不好看,第二不想花時間和別人去爭論swing慢的問題。
剛巧進一家新公司沒什么任務,在看flex,就想能不能把PDF轉換成swf呢?好,馬上google,結果還真找到有這么好的東東SWFTOOLS,這款東西是老外用c寫的,還是開源的,夠強!它有很多功能包括PDF2SWF,SWFCombine,SWFStrings,SWFDump,JPEG2SWF,PNG2SWF,GIF2SWF,WAV2SWF,AVI2SWF,Font2SWF。在這里我們只需要PDF2SWF,關于PDF2SWF的命令大家可以查看他的幫助documentation,E文不好的可以看《如何將PDF轉換成SWF》,這個東西是把pdf的每一頁轉換成swf的每一幀,這樣的話又可以很好的解決翻頁功能。安裝好就可以用來測試了。然后用cmd進入到安裝的目錄下,隨便找一份pdf進行測試,如下:
圖片中“-o”的那個參數就是指點生成的swf的名稱和路徑,這樣就能轉成swf,而且非常清晰和pdf無異,簡單吧~
整合在java里面也簡單,只要一個用Runtime.getRuntime().exec()就行,如下:
package kissjava.pdf;
/**
*@author kissjava;
*/

import java.io.IOException;

public class PDFToSWF {
public static void main(String[] args) throws IOException{
Process process = Runtime.getRuntime().exec("d:\\Program Files\\SWFTools\\pdf2swf.exe -o \"e:\\test.swf\" -t \"e:\\flexBinding.pdf\"");
System.out.println("sucess!!!");
}
}
這樣等生成了swf,就發個通知告訴客戶端可以調用這個swf。
但是當寫好mxml后卻bug一大堆,下面是flex程序初始化的一個函數:
private function init():void{
var mc:MovieClip = swfload.content as MovieClip;
mc.gotoAndStop(1);
var myContextMenu : ContextMenu = new ContextMenu();
myContextMenu.hideBuiltInItems();
this.contextMenu = myContextMenu;
//swfload.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown);
//swfload.addEventListener(MouseEvent.MOUSE_UP,mouseUp);
}
卻發現mc為null,怎么可能呢?用別人用flash寫的swf,明明是可以通訊的,debug進去,發現swfload.content 是AVM1Movie,這東西是個老東西是as2的,他和MovieClip是不來電的,而且用反編譯的查看這個生成的swf,它顯示的版本居然是flash6,天啊,這么老的版本,要想和flash9通訊很困難,找了很多資料,都說很復雜。但是這款最新下載的工具更新的時間明明是2008-09-22,沒道理不支持flash9啊,可是它的幫助文檔卻沒設置flash版本這方面的參數說明,苦悶了很久,抱著試試的態度去看了下他的源碼(我很怕C哈),結果里面果然有蹊蹺,居然有指定flash版本的參數,它為什么不在文檔里說明呢??
把上面生成swf語句改成如下:
Process process = Runtime.getRuntime().exec("f:\\Program Files\\SWFTools\\pdf2swf.exe -o \"e:\\test.swf\" -s flashversion=9 \"e:\\flexBinding.pdf\"");
再運行flex,ok,跑的爽。測試效果如下:
剛巧進一家新公司沒什么任務,在看flex,就想能不能把PDF轉換成swf呢?好,馬上google,結果還真找到有這么好的東東SWFTOOLS,這款東西是老外用c寫的,還是開源的,夠強!它有很多功能包括PDF2SWF,SWFCombine,SWFStrings,SWFDump,JPEG2SWF,PNG2SWF,GIF2SWF,WAV2SWF,AVI2SWF,Font2SWF。在這里我們只需要PDF2SWF,關于PDF2SWF的命令大家可以查看他的幫助documentation,E文不好的可以看《如何將PDF轉換成SWF》,這個東西是把pdf的每一頁轉換成swf的每一幀,這樣的話又可以很好的解決翻頁功能。安裝好就可以用來測試了。然后用cmd進入到安裝的目錄下,隨便找一份pdf進行測試,如下:

整合在java里面也簡單,只要一個用Runtime.getRuntime().exec()就行,如下:













這樣等生成了swf,就發個通知告訴客戶端可以調用這個swf。
但是當寫好mxml后卻bug一大堆,下面是flex程序初始化的一個函數:









卻發現mc為null,怎么可能呢?用別人用flash寫的swf,明明是可以通訊的,debug進去,發現swfload.content 是AVM1Movie,這東西是個老東西是as2的,他和MovieClip是不來電的,而且用反編譯的查看這個生成的swf,它顯示的版本居然是flash6,天啊,這么老的版本,要想和flash9通訊很困難,找了很多資料,都說很復雜。但是這款最新下載的工具更新的時間明明是2008-09-22,沒道理不支持flash9啊,可是它的幫助文檔卻沒設置flash版本這方面的參數說明,苦悶了很久,抱著試試的態度去看了下他的源碼(我很怕C哈),結果里面果然有蹊蹺,居然有指定flash版本的參數,它為什么不在文檔里說明呢??
把上面生成swf語句改成如下:

再運行flex,ok,跑的爽。測試效果如下:
