1.首先下載FlexPaper的源碼。下載地址

2.本人不懂flash,只是百度下,然后自己瞎弄弄的。我用的flash build 4.5

提供個key:1499-4181-9296-6452-2998-3656

首先在flash build中新建一個flex項目,第一步填寫項目名稱-flexpaper,第二步直接默認,最后一步需要注意下。

選擇合并到代碼中,要不然你的bin-debug目錄下面會出現很多其他的swf文件

然后把你1步下載下來的源碼解壓。

把這三個目錄全部復制到你剛才建立的flex項目根目錄下。最后結果是這樣的:

這時候打開src目錄下面默認包下的flexpaper.mxml文件,加入如下代碼,里面paper.swf是從pdf轉換過來的,不懂的就看看我說flexpaper的文章。

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
width="100%" height="100%"
xmlns:flexpaper="com.devaldi.controls.flexpaper.*">



<!--Scale為瀏覽文檔的放大比率-->
<flexpaper:FlexPaperViewer width="100%" height="100%"
Scale="1.0" SwfFile="Paper.swf" />

</mx:Application>

然后點擊項目的屬性,將附加的編譯參數修改成如下所示,-source-path=locale/{locale}

 

我記得這些全部完成以后,好像有個文件一處會有錯誤,如果出錯文件前面會有個紅×,找到它,然后把那句話去掉,就是一個屬性設置。沒什么影響。

然后就可以run了。

修改:

1.右上角有一個FP,點擊以后出現about

找到如下所示的文件:


打開,搜索bttnInfo,一共就三句,全部注釋掉。然后在run,就會發現右上角的FP沒了。(print也是在這個文件里面修改的,大家自己看看吧)

2.修改右下角的logo,如下

找到如下文件,打開,找到sizeChanged這個函數。把里面的兩句話都注釋掉就OK了。(雖然不懂,但是這些看看也都能知道個大概)

好了。修改完畢。至于其他的修改,大家可以自己看看源文件。反正功能老外都幫我們現實了,我們只要修修改改而已。

補充一點,如果想用,入下圖:

找到項目bin-debug下面的flexpaper.swf。(其他的swf就是我之前沒有合并到代碼中的那些swf,如果沒有合并的需要把這些swf文件全部一起拷貝)

放在你下載回來的例子中,替換如下:

把剛才的文件改成這個名字就OK了。然后在運行就會發現可以了。

 

上面的方法似乎是把flash已經寫死了,下面的這種方法編譯出來的swf應該是可以動態加載flash的。(從網上找到的)

<?xml version="1.0" encoding="utf-8"?>  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:fp="com.devaldi.controls.flexpaper.*"
layout="absolute" width="100%" height="100%"
applicationComplete="initApp();">

<mx:Script>
<![CDATA[
import mx.controls.Alert;

public var _aid = 0;//文檔ID

[Bindable]
public var _Scale:Number = 1;//縮放比例

[Bindable]
public var _SwfFile:String = "";//SWF文件路徑

[Bindable]
public var _ZoomTransition:String = "easeOut";

[Bindable]
public var _ZoomTime:Number = 0.6;

[Bindable]
public var _ZoomInterval:Number = 0.1;

[Bindable]
public var _FitPageOnLoad:Boolean = false;//加載后適合高度

[Bindable]
public var _FitWidthOnLoad:Boolean = false;//加載后適合寬度

[Bindable]
public var _PrintEnabled:Boolean = true;//是否支持打印

[Bindable]
public var _FullScreenAsMaxWindow:Boolean = false;//是否支付全屏

[Bindable]
public var _ProgressiveLoading:Boolean = false;//是否延遲加載

[Bindable]
public var _localeChain:String = "zh_CN";//語言

private var isFocus:Boolean = false;

//初始化參數
private function initApp():void{
var params:Object = Application.application.parameters;
_Scale = getNumber(params, "Scale", 1);
_SwfFile = getString(params, "SwfFile", "Paper.swf");
_ZoomTransition = getString(params, "ZoomTransition", "easeOut");
_ZoomTime = getNumber(params, "ZoomTime", 0.6);
_ZoomInterval = getNumber(params, "ZoomInterval", 0.1);
_FitPageOnLoad = getBoolean(params, "FitPageOnLoad", false);
_FitWidthOnLoad = getBoolean(params, "FitWidthOnLoad", false);
_PrintEnabled = getBoolean(params, "PrintEnabled", true);
_FullScreenAsMaxWindow = getBoolean(params, "FullScreenAsMaxWindow", false);
_ProgressiveLoading = getBoolean(params, "ProgressiveLoading", true);
_localeChain = params["localeChain"];

//注冊事件監聽
this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);

//開放給外部(javascript)調用
ExternalInterface.addCallback("hasFocus", hasFocus);
//ExternalInterface.addCallback("focus", focus);
ExternalInterface.addCallback("setViewerFocus", setViewerFocus);
}



private function onMouseOver(event:MouseEvent):void{
this.isFocus = true;
}

private function onMouseOut(event:MouseEvent):void{
this.isFocus = false;
}

public function hasFocus():Boolean{
//Alert.show("hasFocus");
return isFocus;
}

public function setViewerFocus(isFocus:Boolean):void{
//Alert.show("setViewerFocus");
this.paperViewer.setViewerFocus();
}

/**
*
* 獲取String類型參數
* 如果沒有,則返回默認值
*
*/
private function getString(params:Object, name:String, def:String):String{
if(params[name] != null){
return params[name];
}
return def;
}

private function getNumber(params:Object, name:String, def:Number):Number{
if(params[name] != null){
return params[name];
}
return def;
}

private function getBoolean(params:Object, name:String, def:Boolean):Boolean{
//Alert.show("比較:"+name);
if(params[name] != null){
return params[name] == "true";
}
return def;
}
]]>
</mx:Script>
<!--mx:Panel x="165" y="76" width="250" height="200" layout="absolute" title="一個人">
<mx:Label x="59" y="37" text="{Scale}" width="88"/>
</mx:Panel-->

<fp:FlexPaperViewer id="paperViewer"
width="100%"
height="100%"
Scale="{_Scale}"
SwfFile="{_SwfFile}"
ZoomTransition="{_ZoomTransition}"
ZoomTime="{_ZoomTime}"
ZoomInterval="{_ZoomInterval}"
FitPageOnLoad="{_FitPageOnLoad}"
FitWidthOnLoad="{_FitWidthOnLoad}"
PrintEnabled="{_PrintEnabled}"
FullScreenAsMaxWindow="{_FullScreenAsMaxWindow}"
ProgressiveLoading="{_ProgressiveLoading}" />
</mx:Application>


但是按照上述方法試了下,就無法調用官方提供的API接口了。原因是上述的程序并沒有提供接口(接口在FlexPaperViewer_Base.mxml)這個文件中

只需要加入如下的語句,就可以調用gotoPage接口了

public function gotoPage(p:Number):void{
paperViewer.gotoPage(p);
}

別忘了增加一句監聽,給js調用

ExternalInterface.addCallback("gotoPage", gotoPage);
到此OK。編譯出來的可以加載API了。