【转自】http://ajava.org/article-694-1.html
做完二次开发准备工作后,大家可以测试:
a) 重新编译后会发现bin-debug有ajavaflexpaper.swf,改名成FlexPaperViewer.swf后使用,刷新页面后发现空白页面,无任何效果。
b)把原有的FlexPaperViewer.mxml右键设置为默认应用程序,重新编译后,会发现空白页面,无任何效果。
针对a点,我们先看看ajavaflexpaper.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
</mx:Application>
里面没有作任何处理,所以显示空白页面是很正常的。
针对b点,我们看看FlexPaperViewer.mxml
<fp:FlexPaperViewer_Base xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:fp="com.devaldi.controls.flexpaper.*"
xmlns:ct="com.devaldi.controls.*"
xmlns:st="com.devaldi.skinning.*"
addedToStage="bindStageEvents(event)"
>
我们查找bindStageEvents(e:Event)方法,发现没有获取web页面传递的FlexPaper参数处理方法,FlexPaperViewer_base.mxml里有getUrlParamaters()方法,但发现fullUrl是web页面页面URL地址,不包含FlexPaper参数,具体用法没研究。
通过几位朋友的文章介绍,mark修改ajavaflexpaper.mxml如下
<?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 _EncodeURI:Boolean = true;
[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 _MinZoomSize:Number = 0.3;
[Bindable]
public var _MaxZoomSize:Number = 5;
[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");
_EncodeURI = getNumber(params, "EncodeURI", 1);
_ZoomTransition = getString(params, "ZoomTransition", "easeOut");
_ZoomTime = getNumber(params, "ZoomTime", 0.6);
_MinZoomSize = getNumber(params, "MinZoomSize", 0.2);
_MaxZoomSize = getNumber(params, "MaxZoomSize", 5);
_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{
return isFocus;
}
public function setViewerFocus(isFocus:Boolean):void{
this.FlexPaper.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{
if(params[name] != null){
return params[name] == "true";
}
return def;
}
]]>
</mx:Script>
<fp:FlexPaperViewer id="FlexPaper"
width="100%"
height="100%"
Scale="{_Scale}"
SwfFile="{_SwfFile}"
ZoomTransition="{_ZoomTransition}"
ZoomTime="{_ZoomTime}"
MinZoomSize="{_MinZoomSize}"
MaxZoomSize="{_MaxZoomSize}"
ZoomInterval="{_ZoomInterval}"
FitPageOnLoad="{_FitPageOnLoad}"
FitWidthOnLoad="{_FitWidthOnLoad}"
EncodeURI="{_EncodeURI}"
FullScreenAsMaxWindow="{_FullScreenAsMaxWindow}"
ProgressiveLoading="{_ProgressiveLoading}" />
</mx:Application>
代码解释:
applicationComplete="initApp();" - 为初始化时调用initApp()方法
initApp() - 为获取web页面传递过来的FlexPaper参数、注册监听器
_xxxx:xxx - 存储web页面传递过来的FlexPaper参数
<fp:FlexPaperViewer id="FlexPaper"….. - 调用FlexPaperViewer.mxml组件xmlns:fp="com.devaldi.controls.flexpaper.*" - 定义fp,指向flexpaper包
xxxx="{_xxxx}" – 设置FlexPaperViewer.mxml组件的参数
注:由于以前完全未接触过FLEX,所以不知道上面的介绍是否符合FLEX的一般说法。
id="FlexPaper",这个id若改动请主要web页面和FlexPaperViewer.mxml对应的处理。
上面的代码中对比FlexPaperViewer.mxml,会发现有几个参数是没有用到的,如AutoAdjustPrintSize、PrintPaperAsBitmap等,如果我们想使用,只要:
1)在ajavaflexpaper.mxml添加AutoAdjustPrintSize="{_AutoAdjustPrintSize}",需要定义_PrintPaperAsBitmap。
2)在Web页面中增加AutoAdjustPrintSize=xx参数
Mark想应该可以自己定义一些FlexPaper参数,当然这些参数要有后续的处理,需要对源码进行更深入的修改,这些都等各位高手来尝试了。
转载请注明:转自http://ajava.org/,请保留文章的完整。