在线预览功能:
使用软件:FlexPaper1.5.6。
FlexPaper为二次开发双版本,版本一为js控制文档打开,和网上很多资料类似,但完善了很多函数,具体说明见前文;版本二为FlexPaper直接获取地址参数打开文档,具体代码如下:
版本一:
<?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:Metadata> [ResourceBundle("FlexPaper")] [Event(name="onDocumentLoaded", type="com.devaldi.events.DocumentLoadedEvent")] [Event(name="onLoadingProgress", type="flash.events.ProgressEvent")] [Event(name="onDocumentLoadedError", type="flash.events.ErrorEvent")] [Event(name="onCurrPageChanged", type="com.devaldi.events.CurrentPageChangedEvent")] [Event(name="onDocumentLoading", type="flash.events.Event")] [Event(name="onExternalLinkClicked", type="com.devaldi.events.ExternalLinkClickedEvent")] [Event(name="onDocumentPrinted", type="com.devaldi.events.DocumentPrintedEvent")] [Event(name="onPageLoaded", type="com.devaldi.events.PageLoadedEvent")] [Event(name="onPageLoading", type="com.devaldi.events.PageLoadingEvent")] [Event(name="onErrorLoadingPage", type="com.devaldi.events.ErrorLoadingPageEvent")] </mx:Metadata> <mx:Script> <![CDATA[ import mx.controls.Alert; import com.devaldi.events.CurrentPageChangedEvent; import com.devaldi.events.CursorModeChangedEvent; import com.devaldi.events.DocumentLoadedEvent; import com.devaldi.events.DocumentPrintedEvent; import com.devaldi.events.ErrorLoadingPageEvent; import com.devaldi.events.ExternalLinkClickedEvent; import com.devaldi.events.FitModeChangedEvent; import com.devaldi.events.ScaleChangedEvent; import com.devaldi.events.ViewModeChangedEvent; public var _aid:Number = 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; //------------------------ [Bindable] public var _SearchMatchAll:Boolean = true; [Bindable] public var _PrintPaperAsBitmap:Boolean = false; [Bindable] public var _ViewModeToolsVisible:Boolean = true; [Bindable] public var _ZoomToolsVisible:Boolean = true; [Bindable] public var _NavToolsVisible:Boolean = true; [Bindable] public var _CursorToolsVisible:Boolean = true; [Bindable] public var _SearchToolsVisible:Boolean = true; //初始化参数 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"]; _SearchMatchAll=getBoolean(params, "SearchMatchAll", true); _PrintPaperAsBitmap=getBoolean(params, "PrintPaperAsBitmap", false); _ViewModeToolsVisible=getBoolean(params, "ViewModeToolsVisible", true); _ZoomToolsVisible=getBoolean(params, "ZoomToolsVisible", true); _NavToolsVisible=getBoolean(params, "NavToolsVisible", true); _CursorToolsVisible=getBoolean(params, "CursorToolsVisible", true); _SearchToolsVisible=getBoolean(params, "SearchToolsVisible", true); //注册事件监听 this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver); this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); this.addEventListener(MouseEvent.CLICK,setFocusTo); this.addEventListener("onPageLoaded",pageLoadedEventHandler); //开放给外部(javascript)调用 ExternalInterface.addCallback("hasFocus", hasFocus); ExternalInterface.addCallback("setViewerFocus", setViewerFocus); ExternalInterface.addCallback("gotoPage", gotoPage); ExternalInterface.addCallback("fitWidth", fitWidth); ExternalInterface.addCallback("fitHeight", fitHeight); ExternalInterface.addCallback("loadSwf", loadSwf); ExternalInterface.addCallback("printPaperRange", printPaperRange); ExternalInterface.addCallback("searchText", searchText); ExternalInterface.addCallback("prevSearchMatch", prevSearchMatch); ExternalInterface.addCallback("nextSearchMatch", nextSearchMatch); ExternalInterface.addCallback("switchMode", switchMode); ExternalInterface.addCallback("Zoom", Zoom); ExternalInterface.addCallback("nextPage", nextPage); ExternalInterface.addCallback("getCurrPage", getCurrPage); ExternalInterface.addCallback("prevPage", prevPage); ExternalInterface.addCallback("printPaper", printPaper); ExternalInterface.addCallback("getTotalPages", getTotalPages); } //---------------------------事件------------------------------ protected function onLoadedError(event:ErrorEvent):void{ dispatchEvent(event); } private function setFocusTo(e:MouseEvent):void{ stage.stageFocusRect = false; stage.focus = e.target as InteractiveObject; } private function onMouseOver(event:MouseEvent):void{ this.isFocus = true; } private function onMouseOut(event:MouseEvent):void{ this.isFocus = false; } protected function onCurrPageChanged(event:CurrentPageChangedEvent):void{ dispatchEvent(event); } protected function documentLoadedErrorHandler(event:Event):void{ dispatchEvent(event); } protected function onExternalLinkClickedHandler(event:ExternalLinkClickedEvent):void{ dispatchEvent(event); } protected function onDocumentLoadingProgressHandler(event:ProgressEvent):void{ dispatchEvent(event); } protected function papersLoadingHandler(event:Event):void{ dispatchEvent(event); } protected function pageLoadingEventHandler(event:Event):void{ dispatchEvent(event); } protected function documentPrintedHandler(event:DocumentPrintedEvent):void{ dispatchEvent(event); } protected function documentLoadedHandler(event:Event):void{ dispatchEvent(event); } protected function pageLoadedEventHandler(event:Event):void{ dispatchEvent(event); } protected function errorLoadingPageEventHandler(event:ErrorLoadingPageEvent):void{ dispatchEvent(event); } //----------------------------函数----------------------------- public function getTotalPages():Number{ return FlexPaper.getTotalPages(); } public function printPaper(e:Event):void{ FlexPaper.printPaper(e); } public function printPaperRange(range:String):void{ FlexPaper.printPaperRange(range); } public function searchText(text:String):void{ FlexPaper.searchText(text); } public function prevSearchMatch():void{ FlexPaper.prevSearchMatch(); } public function nextSearchMatch(text:String):void{ FlexPaper.nextSearchMatch(text); } public function switchMode(mode:String=null):void{ FlexPaper.switchMode(mode); } public function Zoom(factor:Number):void{ FlexPaper.Zoom(factor); } public function nextPage():void{ FlexPaper.nextPage(); } public function prevPage():void{ return FlexPaper.prevPage(); } public function getCurrPage():Number{ return FlexPaper.getCurrPage(); } public dynamic function loadSwf(s:String):void{ FlexPaper.SwfFile = s; } public function fitHeight():void{ FlexPaper.fitHeight(); } public function fitWidth():void{ FlexPaper.fitWidth(); } public function gotoPage(p:Number):void{ FlexPaper.gotoPage(p); } 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%" onDocumentLoaded="documentLoadedHandler(event)" onDocumentLoading="papersLoadingHandler(event)" onDocumentLoadedError="documentLoadedErrorHandler(event)" onLoadingProgress="onDocumentLoadingProgressHandler(event)" onCurrPageChanged="onCurrPageChanged(event)" onExternalLinkClicked="onExternalLinkClickedHandler(event)" onDocumentPrinted="documentPrintedHandler(event)" onPageLoaded="pageLoadedEventHandler(event)" onPageLoading="pageLoadingEventHandler(event)" onErrorLoadingPage="errorLoadingPageEventHandler(event)" Scale="{_Scale}" SwfFile="{_SwfFile}" ZoomTransition="{_ZoomTransition}" ZoomTime="{_ZoomTime}" MinZoomSize="{_MinZoomSize}" MaxZoomSize="{_MaxZoomSize}" ZoomInterval="{_ZoomInterval}" FitPageOnLoad="{_FitPageOnLoad}" FitWidthOnLoad="{_FitWidthOnLoad}" EncodeURI="{_EncodeURI}" FullScreenAsMaxWindow="{_FullScreenAsMaxWindow}" ProgressiveLoading="{_ProgressiveLoading}" SearchMatchAll="{_SearchMatchAll}" PrintPaperAsBitmap="{_PrintPaperAsBitmap}" ViewModeToolsVisible="{_ViewModeToolsVisible}" ZoomToolsVisible="{_ZoomToolsVisible}" NavToolsVisible="{_NavToolsVisible}" CursorToolsVisible="{_CursorToolsVisible}" SearchToolsVisible="{_SearchToolsVisible}" locale="{_localeChain}" PrintEnabled="{_PrintEnabled}" /> </mx:Application>
使用方法:
var fp = new FlexPaperViewer('divPDF',{ config : { SwfFile :encodeURI(url+swf), Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.1, FitPageOnLoad : true, FitWidthOnLoad : true, PrintEnabled : false, FullScreenAsMaxWindow : true, ProgressiveLoading : true, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : true, InitViewMode : 'Portrait', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'zh_CN' } });
注:如果你没有修改过flexpaper_flash.js文件中的FlexPaperViewer()函数,请使用
var fp = new FlexPaperViewer( 'FlexPaperViewer', 'divPDF', { config : { SwfFile : escape('FusionCharts.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' }});
divPDF为flexpaper渲染到的容器ID,FlexPaperViewer为你的swf文件名,笔者就把该参数去掉,直接在flexpaper_flash.js文件中定义。
版本二:
<?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[ [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 = true;//加载后适合宽度 [Bindable] public var _PrintEnabled:Boolean = false;//是否支持打印 [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{ _Scale = 1; _SwfFile = this.loaderInfo.parameters.url; _EncodeURI = true; _ZoomTransition = "easeOut"; _ZoomTime = 0.6; _MinZoomSize = 0.2; _MaxZoomSize = 5; _ZoomInterval = 0.1; _FitPageOnLoad =false; _FitWidthOnLoad = true; _PrintEnabled = false; _FullScreenAsMaxWindow = false; _ProgressiveLoading = true; _localeChain ="zh_CN";//语言 //注册事件监听 this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver); this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); } //---------------------------事件------------------------------ private function onMouseOver(event:MouseEvent):void{ this.isFocus = true; } private function onMouseOut(event:MouseEvent):void{ this.isFocus = false; } ]]> </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>
其中 this.loaderInfo.parameters.url 是获取加载该flash的地址参数,并非当前url地址的参数,这样修改主要目的是加载flexpaper时好传递参数。
第一种版本实现很简单,效果如下:
第二种版本可直接在浏览器地址输入:http://192.168.1.100/Diyflexpaper_url.swf?url=1.swf
注意,这里url地址可以是网络地址(只要有权限)、服务器存放swf地址。
效果如下
当然这种方式信息暴露太明显了,客户一看就知识用发什么东西,打开的地址等,所以我们可以单独编写一个html文件,打开文档即可。
到此,文档上传并在线预览功能已全部总结完毕,欢迎阅者提出意见。
作者:
kunoy
申明:作者写博是为了总结经验,和交流学习之用。
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!