有時(shí)候一些資料只能給別人看,如可打印的文檔如DOC,PDF,但不能讓其他無權(quán)限的人另存或者打印,特別是web版的文件管理類的系統(tǒng),總會(huì)考慮到這個(gè)問題。當(dāng)用IE直接打開pdf的時(shí)候,盡管可以疲敝IE的另存為,但是點(diǎn)擊PDF文件的時(shí)候,再按F8的時(shí)候,PDF的閱讀器如(adobereader)會(huì)顯示ToolsBar,所以直接打開pdf貌似行不同(目前所知道的)。當(dāng)時(shí)一聽到這個(gè)需求立馬就想用swing(因?yàn)槲抑欢恍﹕wing),把pdf轉(zhuǎn)換成圖片,然后每一頁對應(yīng)一張圖片顯示,但是馬上給否定了,第一轉(zhuǎn)換出來的圖片不清晰(我目前所了解的)而且這圖片放大縮小的效果也不好看,第二不想花時(shí)間和別人去爭論swing慢的問題。
剛巧進(jìn)一家新公司沒什么任務(wù),在看flex,就想能不能把PDF轉(zhuǎn)換成swf呢?好,馬上google,結(jié)果還真找到有這么好的東東SWFTOOLS,這款東西是老外用c寫的,還是開源的,夠強(qiáng)!它有很多功能包括PDF2SWF,SWFCombine,SWFStrings,SWFDump,JPEG2SWF,PNG2SWF,GIF2SWF,WAV2SWF,AVI2SWF,F(xiàn)ont2SWF。在這里我們只需要PDF2SWF,關(guān)于PDF2SWF的命令大家可以查看他的幫助documentation,E文不好的可以看《如何將PDF轉(zhuǎn)換成SWF》,這個(gè)東西是把pdf的每一頁轉(zhuǎn)換成swf的每一幀,這樣的話又可以很好的解決翻頁功能。安裝好就可以用來測試了。然后用cmd進(jìn)入到安裝的目錄下,隨便找一份pdf進(jìn)行測試,如下:
圖片中“-o”的那個(gè)參數(shù)就是指點(diǎn)生成的swf的名稱和路徑,這樣就能轉(zhuǎn)成swf,而且非常清晰和pdf無異,簡單吧~
整合在java里面也簡單,只要一個(gè)用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,就發(fā)個(gè)通知告訴客戶端可以調(diào)用這個(gè)swf。
但是當(dāng)寫好mxml后卻bug一大堆,下面是flex程序初始化的一個(gè)函數(shù):
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);
}
卻發(fā)現(xiàn)mc為null,怎么可能呢?用別人用flash寫的swf,明明是可以通訊的,debug進(jìn)去,發(fā)現(xiàn)swfload.content 是AVM1Movie,這東西是個(gè)老東西是as2的,他和MovieClip是不來電的,而且用反編譯的查看這個(gè)生成的swf,它顯示的版本居然是flash6,天啊,這么老的版本,要想和flash9通訊很困難,找了很多資料,都說很復(fù)雜。但是這款最新下載的工具更新的時(shí)間明明是2008-09-22,沒道理不支持flash9啊,可是它的幫助文檔卻沒設(shè)置flash版本這方面的參數(shù)說明,苦悶了很久,抱著試試的態(tài)度去看了下他的源碼(我很怕C哈),結(jié)果里面果然有蹊蹺,居然有指定flash版本的參數(shù),它為什么不在文檔里說明呢??
把上面生成swf語句改成如下:
Process process = Runtime.getRuntime().exec("f:\\Program Files\\SWFTools\\pdf2swf.exe -o \"e:\\test.swf\" -s flashversion=9 \"e:\\flexBinding.pdf\"");
再運(yùn)行flex,ok,跑的爽。測試效果如下:
剛巧進(jìn)一家新公司沒什么任務(wù),在看flex,就想能不能把PDF轉(zhuǎn)換成swf呢?好,馬上google,結(jié)果還真找到有這么好的東東SWFTOOLS,這款東西是老外用c寫的,還是開源的,夠強(qiáng)!它有很多功能包括PDF2SWF,SWFCombine,SWFStrings,SWFDump,JPEG2SWF,PNG2SWF,GIF2SWF,WAV2SWF,AVI2SWF,F(xiàn)ont2SWF。在這里我們只需要PDF2SWF,關(guān)于PDF2SWF的命令大家可以查看他的幫助documentation,E文不好的可以看《如何將PDF轉(zhuǎn)換成SWF》,這個(gè)東西是把pdf的每一頁轉(zhuǎn)換成swf的每一幀,這樣的話又可以很好的解決翻頁功能。安裝好就可以用來測試了。然后用cmd進(jìn)入到安裝的目錄下,隨便找一份pdf進(jìn)行測試,如下:

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













這樣等生成了swf,就發(fā)個(gè)通知告訴客戶端可以調(diào)用這個(gè)swf。
但是當(dāng)寫好mxml后卻bug一大堆,下面是flex程序初始化的一個(gè)函數(shù):









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

再運(yùn)行flex,ok,跑的爽。測試效果如下:
