`
hjwromantic
  • 浏览: 27700 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

FlexPaper二次开发之解决中文路径无法显示问题

 
阅读更多

我们知道对于原始的FlexPaper来说,如果打开带有中文的url路径的swf文件时,原始的FlexPaper无法显示带中文路径的swf文件!针对网友提出的问题我提供两种解决方案:

特别注意:需要设置Web服务器的URL编码,如果Web服务器是Tomcat需要设置如下配置,在server.xml下配置:

    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" 
               URIEncoding="UTF-8"
     />

方案一:当我们需要通过FlexPaper来打开swf文件时,实现类似百度在线阅读文档功能需求!我们可以在我们应用中尽量避免出现中文路径的swf文件路径,如避免出现像这样的文件路径:

如果所示,对于原始的FlexPaper来说,我们要打开这样路径下的swf文件时候,原始的FlexPaper无法正常显示swf文件,会出现一直在打转的情况!为了在项目需要,打开对应的swf文件的话,可以尽量将swf的文件名转化成英文或者数字的文件名!当然这不是最完美的解决方案!这种解决方案在项目开发过程中被称为规避法则!

当然,我还有最佳的解决方案,那就是对原始的FlexPaper进行二次开发来解决以上存在的问题!言归正传,下面开始讲方案:

方案二:

1、下载Flex集成开发工具Adobe Flash Builder v4.5

2、下载原始的FlexPaper的源码,网上有链接,自己下载!

3、在开发工具里新建Flex项目,和java项目的创建方式类似,见下图:

生成如下结构:

4、将下载的原始的FlexPaper源码解压,见下图:

拷贝其中的locale、src、assets三个文件夹到新建的Flex下,如图所示:

5、修改项目属性,点击项目的属性,将附加的编译参数修改成如下所示,-locale zh_CN -source-path=locale/{locale} -keep-all-type-selectors=true,其中这个编辑参数决定了Flex播放器是否支持播放中文的路径下的swf文件,这个步骤是关键,见下图:

6、在src下新建一个flexpaper.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 _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);  
				ExternalInterface.addCallback("gotoPage", gotoPage);
			}  
			
			
			
			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;  
			}  
			
			public function gotoPage(p:Number):void{
				paperViewer.gotoPage(p);
			}
			
		]]>  
	</mx:Script>  

	<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>


7、重新构建整个Flex项目,在集成开发工具的工作空间找到编译生成Flex播放器的swf文件,如下图:

将改为文件引用到项目中即可!

这样就可以解决FlexPaper无法播放带中文路径的swf文件了!

如下为显示效果图:

分享到:
评论

相关推荐

    Flexpaper二次开发入门教程.pdf

    ### Flexpaper二次开发入门教程概览 Flexpaper是一款由新西兰Devaldi公司开发的开源组件,主要用于在线浏览和展示各种类型的文档,如DOC、PPT、PDF等,无需额外的软件环境支持。Flexpaper遵循GPL开源协议,允许用户...

    Flexpaper二次开发入门教程

    Flexpaper二次开发入门教程

    flexpaper二次开发版本

    1.去除右上角fp字样 2.去除右下角logo 3.去除工具栏打印按钮 4.去除工具栏文字选择按钮(等价于文档内容不可复制) 5.去除右键菜单的打印、全选、复制等选项 6.增加鼠标悬浮按钮显示中文提示

    FlexPaper 二次开发教程

    ### FlexPaper 二次开发教程知识点详解 #### 一、FlexPaper 概述 **1.1 FlexPaper 是什么?** FlexPaper 是一款由新西兰 Devaldi 公司开发的在线文档浏览组件,允许用户无需安装任何插件即可在网页上浏览多种格式...

    flexpaper二次开发

    ### Flexpaper二次开发知识点 #### 一、Flexpaper概述 **1.1 Flexpaper定义** Flexpaper是一款由新西兰Devaldi公司开发的用于在线浏览多种文档格式(如DOC、PPT、PDF)的组件。该组件遵循GPL开源协议,允许用户...

    《Flexpaper二次开发入门教程》

    《Flexpaper 二次开发入门教程》是一份详细指导开发者如何对Flexpaper进行定制化开发的文档,由互联网上的资源汇集并由aigo整理而成。Flexpaper是一款强大的在线阅读和文档预览工具,它允许用户以丰富的交互方式查看...

    flexpaper2.2.1二次开发版本及教程(去logo、复制、打印操作)

    在本文中,我们将深入探讨FlexPaper的这些关键特性以及如何进行二次开发。 1. **去除Logo**:在默认情况下,FlexPaper在显示文档时可能会在页面底部显示其Logo,这对于商业用途可能不是理想的。通过二次开发,...

    FlexPaper二次开发教程及最新2.2.4版源码(可去除打印功能和屏蔽右键)

    使用FlexPaper可以在WEB页面在线阅读PDF文件而不用安装Adodb reader客户端,附件包含FlexPaper二次开发教程、参考资料、最新版源码(2.2.4)、SWC库文件以及去除打印功能和屏蔽右键后的生成文件。

    flexpaper二次开发版本1.5.6

    去除logo,打印,增加js调用函数。修改加载中文名swf问题。

    FlexPaper二次开发,重点实现记忆播放的功能,下次打开时可以直接跳转到上次观看的页面

    FlexPaper二次开发,重点实现记忆播放的功能,下次打开时可以直接跳转到上次观看的页面,同时还实现了去"水印"、去"About关于"、去“右键——&gt;复制、打印等功能"。 二次开发实际是重新编译生成了FlexPaperViewer.swf...

    完美解决flexpaper打印按钮、fp字样去logo及中文路径不能读取的问题.docx

    6. 中文路径问题:FlexPaper在处理中文路径时可能出现问题,这通常是由于编码或者文件名解析不当导致的。确保所有文件路径都使用正确的UTF-8编码,并在传递给FlexPaper的参数中使用URL编码(encodeURIComponent)来...

    解决使用flexpaper时兼容性问题

    然而,由于浏览器之间的差异,FlexPaper在某些情况下可能会遇到兼容性问题,这可能导致某些浏览器无法正常显示或操作文档。本解答将详细介绍如何解决FlexPaper的兼容性问题以及`flexpaper_repair.js`在这个过程中的...

    FlexPaper Demo 二次开发 去除打印、关于、logo、能转swf

    总的来说,这个FlexPaper的Demo是二次开发的一个实例,展示了如何通过编程接口和配置实现对打印、Logo显示的控制,以及PDF到SWF的转换。对于任何希望在Web应用中集成高级文档查看功能的开发者来说,都是一个宝贵的...

    FlexPaper 2.1.2 二次开发Flex源码 二次开发 Logo 、书签、打印、搜索、缩略图、添加按钮、js交互

    基于FlexPaper 2.1.2 版本修改的Flex源码 博客地址:http://www.cnblogs.com/xcong/p/3142155.html 修复双页、缩略图、搜索BUG。 去关于、Logo。 打印添加属性控制。 增加书签功能。

    flex项目 FlexPaper 2.1.2

    在进行FlexPaper的二次开发时,首先需要对Flex编程有一定的了解。Flex是基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIAs)。开发者可以使用MXML和ActionScript来设计和构建用户界面,这使得...

    Flexpaper阅读器开发手册

    - **定制编译安装**:为了进行二次开发,首先需要创建一个名为FlexPaper_SDK4的库项目,并将FlexPaper源码目录下的所有文件及其子目录移动至该项目中。之后,需要调整编译设置,例如取消“启用警告”选项,设置附加...

Global site tag (gtag.js) - Google Analytics