Flexpaper 开发教程


Flexpaper 开发教程  1. Flexpaper 介绍  1.1 Flexpaper 是什么?  Flexpaper 是由一家新西兰的 Devaldi 公司开发的在线浏览各 种文件的组件,它采用的是 GPL 开源的协议,即源代码开放 并可以最其进行修改使用,这一切都是免费得,但不能对  Flexpaper 源码修改后封装成商业软件进行发布和销售。  Flexpaper 官方主页:http://flexpaper.devaldi.com  1.2 Flexpaper 可以做什么? 如果你有一些 DOC、PPT、PDF 等格式的文档,想在网站里提供给大家在线阅读,那怎样做好呢? 现在 Flexpaper 可以为你做到,当然 Flexpaper 还有一个搭档,那就是 SWFTools,通过 SWFTools  生产 SWF,再通过 Flexpaper 组件显示,这对黄金搭档可以为你实现的在线文档功能。 使用 Flexpaper 浏览 PDF,那需要 PDF 软件环境的支持吗?答案是不需要的,Flexpaper 还可以被 当做 Flex 的库来使用,这些都使开发、使用变得更简单。  1.3 Flexpaper 版本  Flexpaper 的初始版本 1.0 发布于 2009 年, 到现在已经有 42 个版本。 swc 版本为组件包, 使用 swc  组件包需要导入到工程中再调用,flash 版本为可以单独执行的,里面有例子、JS 文件、SWF 文 件,我们采用 flash 版本很容易就可以使用 Flexpaper 显示在线文档。  SWFTools 介绍  1.5 SWFTools 介绍 SWFTools 是一个 SWF 处理、转换的开源工具,它的功能主要体现在: 1. SWF 的抽取、合并、解析、读写; 2. PDF/JPEG/PNG/AVI/TTF/WAV 等格式转换成 SWF。 SWFTools 是采用 GPL 开源协议,永久免费,现在 SWFTools 已经支持 Solaris, Linux (32 bit  和  64 bit), FreeBSD, OpenBSD, HP­UX, Solaris, MacOS X and Windows 98/ME/2000/XP/Vista 等多个系 统。 ,下载后安装后可以看到它的工具 官方对各个工具的描述: • PDF2SWF A PDF to SWF Converter. Generates one frame per page. Enables you to have fully  formatted text, including tables, formulas, graphics etc. inside your Flash Movie. It's based on  the  xpdf  PDF parser from Derek B. Noonburg. • SWFCombine A multi­function tool for inserting SWFs into Wrapper SWFs, contatenating  SWFs, stacking SWFs or for basic parameter manipulation (e.g. changing size). • SWFStrings Scans SWFs for text data. • SWFDump Prints out various informations about SWFs, like contained images/fonts/sounds,  disassembly of contained code as well as cross­reference and bounding box data. • JPEG2SWF Takes one or more JPEG pictures and generates a SWF slideshow from them.  Supports motion estimation compression (h.263) for better compression of video sequences. • PNG2SWF Like JPEG2SWF, only for PNGs. • GIF2SWF Converts GIFs to SWF. Also able to handle animated gifs. • WAV2SWF Converts WAV audio files to SWFs, using the  L.A.M.E.  MP3 encoder library. • AVI2SWF Converts AVI animation files to SWF. It supports Flash MX H.263 compression.  Some examples can be found at  examples.html. (Notice: this tool is not included anymore in  the latest version, as ffmpeg or mencoder do a better job nowadays) • Font2SWF Converts font files (TTF, Type1) to SWF. • SWFBBox Allows to read out, optimize and readjust SWF bounding boxes. • SWFC A tool for creating SWF files from simple script files. Includes support for both  ActionScript 2.0 as well as ActionScript 3.0. • SWFExtract Allows to extract Movieclips, Sounds, Images etc. from SWF files. • AS3Compile A standalone ActionScript 3.0 compiler. Mostly compatible with Flex. gpdf2swf 的工作界面: SWFTools 官方网站:http://www.swftools.org/  2. Flexpaper 二次开发准备工作  Flexpaper 虽然已经提供了不错的功能,但我们还是有可能需要根据自己的需要对 Flexpaper 进行 二次开发,做什么事情都要做足准备,这样才可提高成功率,因此进行 Flexpaper 二次开发,这 一步也是必不可少的,需要什么、怎么去做,我们会在下面慢慢介绍。  2.1  获得 Flexpaper 源码 我们可以通过http://flexpaper.googlecode.com/svn/trunk/这个地址,获取 Flexpaper 的源码(我下载的 是 2012‐1‐24 日的版本)。在获取前,我们需要安装 SVN,这里我们使用 TortoiseSVN,安装后打 开,选择 file‐>TortoiseSVN‐>Repo‐browser,输入上面的地址: 链接上后,可以看到目录结果如下图: 我们选择 trunk/FlexPaper 目录,右键选择 Checkout,在提示框中选择 Checkout 目录,确认 后会开始下载,如下图: Checkout 完毕后,可以看到相应目录下  2.3  把 Flexpaper 源码导入 Adobe Flash Builder  2.3.1  创建 Flex 项目 选择工具栏上的“文件”‐>新建  ‐> Flex 项目 在创建项目窗口,我们主要填写、选择下面内容:  a)输入项目名称,这里我使用了 ajavaflexpaper;  b)项目位置为你的存放项目文件的目录,这里我使用了 F:\ajavaflexpaper;  c)应用类型我们选择”web(在 Adobe Flash Player 中运行)”,因为我们要在 web 页面浏览,所以选 择了此项;  d)选择 Flex SDK 版本,这里采用 Flex SDK 4.0;  e)应用的是那种服务器技术,可选择:无/其他、ASP.NET、ColdeFusion、J2EE、PHP  等,这里我 选择了无/其他。 填写、选择完毕后,点击下一步,进入“配置输出”提示框,选择已编译的  FLEX  应用程序的 位置,这里我采用了默认的 bin‐debug 目录,源码重新编译后,文件会放在 bin‐debug 目录。 点击下一步,来到最后一步,设置源路径和库路径。 我们选择的内容有组件集选择“仅 MX” ,框架链接选择“合并到代码中” ,其他默认就可以,当 然你也可以重新设置你的“主源文件夹”和“主应用程序文件” 。 点击完成,Flex 项目创建完毕,到 F:\ajavaflexpaper 目录,可看到如下图的目录结构: 2.3.2  把 flexpaper 源码复制到 Flex 项目目录 我们要复制的目录有:locale、src  复制到  Flex  项目根目录(F:\ajavaflexpaper)中,lib  里的  FlexPaper_Resources.swc 复制到 F:\ajavaflexpaper\libs 中。 复制完毕后,在 Flash Builder 4 中右击项目名选择刷新,刷新后可见项目中增加了一些文件,见 下图红色框部分: 到目前为止,准备工作已完成,为 FlexPaper 二次开发做好准备。下节我们先介绍 FlexPaper  和 SWFTools 的简单使用,对使用有了了解后,再进入二次开发内容。  3. SWFTools 的简单使用 有了第一章的介绍, 大家对 SWFTools 应该有了基本的认识, 下面我们开始演示怎样使用 SWFTools  的 gpdf2swf.exe、pdf2swf.exe 的使用,由于本教程的内容范围较小,所以其他工具使用不在这里 介绍。  3.1  使用 swftools 生成第一个 SWF  方式一、使用 gpdf2swf 可视化窗口 我们打开 gpdf2swf 可视化窗口后, 选择 Open PDF, 选择要生成 SWF 的 PDF 文件,之后保存为 SWF, 你可以选择把所有页面或者部分页面加入到 SWF 文件,操作如下图: (打开 PDF 文件) (选择 PDF 文件) (设置参数) (保存为 SWF 文件) 在这里大家要注意,使用目前最新版本的 SWFTools 中 gpdf2swf.exe 生成 PDF,在设置参数中, 只能选择 Flash 7 或者 8 版本,但目前 Flash 9 或者 10 版本都大行其道,因此 mark 建议生成 SWF  时采用第二种方式,我们下面继续介绍。 方式二、使用 pdf2swf.exe 命令 我们打开 CMD,进入 SWFTools 的安装目录,这里我的安装目录是 D:\Program  Files\SWFTools,  pdf2swf.exe 的命令形式为:  pdf2swf.exe [‐options] file.pdf ‐o file.swf  我们执行下面的命令:  pdf2swf.exe ‐t F:\ajava\FusionCharts.pdf ‐s flashversion=9 ‐o F:\ajava\FusionCharts.swf 由上图我们可以看到每页转换的提示,最后写入到  SWF 文件中,打开  F:\ajava  目录,可以看到  FusionCharts.swf 已经生成,这个 swf 的版本是 flash 9。 这里用到了 pdf2swf.exe 的‐t、‐s、‐o 参数,下一节我们对 pdf2swf.exe 的参数作详细介绍。 注意:pdf2swf.exe 命令中的文件名、目录名,不能带空格,否则不能生成 SWF。  3.2 SWFTools 参数介绍 我们输入:D:\Program Files\SWFTools>pdf2swf.exe –h,就可以获得帮助信息,本小节的参数描述 转自某朋友的文章,mark  作了简单的修改,因不知道谁是原创者,特说明,表示感谢,若作者 见本教程,可到 ajava.org 网站联系 mark,将在本节中添加原作者大名。  ‐h ,  –help  打印帮助信息  ‐V ,  –version  打印版本号  ‐o ,  –output file.swf  指定输出的 swf 文件名  ‐p , –pages range  指定转换的页面范围 1‐20  或者 1,4,6,9‐11,使用的页码描述方法 与打印机打印文件时候的选页一样  ‐P ,  –password password  指定打开 pdf 的密码  ‐v ,  –verbose  转换时输出详细的内容 ‐z ,  –zlib  使用 Flash 6 的 zlib 压缩机制  ‐i ,  –ignore  允许程序修改 pdf 的绘制顺序,可能会导致结果与原来有差异  ‐j ,  –jpegquality quality  设置转换其中的 jpeg 图片的质量,从 0 到 100,默认值是 85。  ‐s ,  –set param=value  设置 SWF 转码时候的参数,具体参数可以用 pdf2swf ‐s help 获取  ‐w ,  –samewindow  设置转换后的 swf 打开原 pdf 中的连接时使用相同的窗口  ‐t ,  –stop  在每页结尾添加一个 stop()命令  ‐T ,  –flashversion num  设置 SWF 所使用的 flash 版本号  ‐F ,  –fontdir directory  指定字体文件所在路径  ‐b ,  –defaultviewer  指定默认的 swf 导航文件,用来翻页、放大缩小等等  ‐l ,  –defaultloader  指定默认的 swf 加载文件,用来显示加载进程效果  ‐B ,  –viewer filename  指定 swf 导航文件,作用同‐b  ‐L ,  –preloader filename  指定 swf 加载文件,作用同‐l  ‐q ,  –quiet  不打印普通信息,用‐qq 就不打印警告信息。  ‐S ,  –shapes  不使用字体,所有都转为形状。  ‐f ,  –fonts  在 swf 中保存全部字体。  ‐G ,  –flatten  在文件中尽量去除影片层,合并它们  ‐I ,  –info  不做实际转换,仅显示 PDF 的信息。  ‐Q ,  –maxtime n  如果运行时间超时则退出。 我们可以看到‐s 参数的用途,设置 SWF 转码时候的参数,可以通过 pdf2swf ‐s help 命令获得更多 的参数:  PDF 参数:  PDF device global parameters:  fontdir=  指定字体目录,  与 1 级参数的‐F 相若  font=  增加额外的字体文件  pages=  指定页面范围,与 1 级参数的‐p 相若  zoom=  指定分辨率,默认为 72dpi  languagedir=  增加一个 xpdf 的语言目录,对非西欧字符有用  multiply=  在几倍分辨率下渲染 poly2bitmap  把其中的图形转成点阵  bitmap  把所有内容转成点阵(包括字体)  SWF 参数:  SWF layer options:  jpegsubpixels= jpeg 图片的分辨率  ppmsubpixels=  无损图片的分辨率  subpixels=  快速设置上两个参数  drawonlyshapes  所有都转成图形  ignoredraworder  SWFs  允许执行一些小优化  linksopennewwindow  链接打开新窗口  linktarget  新链接窗口的名称  linkcolor=  内部链接函数,如果点击一个内部链接,将调用该 actionscript 函数  externallinkfunction=  外部链接函数,如果点击一个外部链接,将调用该 actionscript 函数  disable_polygon_conversion  不要将笔画转成多边形  caplinewidth=  线条最低转换宽度,比这个细的线条将不转换  insertstop  在 swf 的每个桢中添加 stop()函数  protect  增加 protect 标签,禁止在 flash 中加载该 swf  flashversion=  设置最低 swf 版本  framerate=  设置桢率  minlinewidth=  将宽度少于某值的矩形转成线条  simpleviewer  使用简单的导航  animate                                          insert a showframe tag after each placeobject (animate draw order  of PDF files)  jpegquality=  设置 jpeg 的压缩质量  splinequality=  设置样条曲线的转换质量  disablelinks  禁止链接  4. Flexpaper 简单使用 通过上面三章的内容,大家对 Flexpaper、SWFTools 应该有大概的了解了,SWF 文件也已经生成 了,我们开始进入 Flexpaper 的使用的介绍。 本章中只演示 Flexpaper 在 WEB 页面上的使用,我们要下载一个 Flash 版本的 FlexPaper,这里我 选择了 FlexPaper_1.5.0_flash。 下载地址:http://code.google.com/p/flexpaper/downloads/list 下载、解压后,可以看到包含如下文件: 主要文件、文件夹说明:  Examples  存放 Flexpaper 使用例子  Js  存放 Flexpaper 调用的 JS 文件  Php  存放 PHP 使用的文档、JS、库、SWF 文件  Index.html  例子主页  FlexpaperViewer Flexpaper 的核心文件,用于浏览 PDF  Paper.swf  官方的默认宣传文件  playerProductInstall.swf  如果客户端浏览器的 flashplayer 版本过低,他是不会嵌入你的 swf,  而是嵌入这个 playerProductInstall.swf 到页面上下载 flashplayer 的安装文件。  4.1  第一个 Flexpaper 例子 那我们开始完成第一个 Flexpaper 例子吧, 一个最简单的例子, 我们主要用到 FlexpaperViewer.swf、  JS 文件夹中的 flexpaper_flash.js。 创建 HTML 页面 test.html,代码如下:      ajava.org Flexpaper 例子            Document  loading..

  var fp = new FlexPaperViewer(  'FlexPaperViewer',  'viewerPlaceHolder', { 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'  }});   
      把 第 三 章 部 分 生 产 的  FusionCharts.swf  复 制 到  FlexPaper  根 目 录 下 , 我 这 里 是  F:\FlexPaper1.5.0flash,这一步是必须的,如果不是 test.html 怎样读取到 FusionCharts.swf 呢? 测试: 打开浏览器,输入 test.html 的本地地址,就可以看到 FlexPaper 的浏览效果。这里我分别在前言 中的 3 种测试环境,结果都没问题,效果如下图: 如果你用 FF 浏览器, 出现提示 “SecurityError: Error #2148: SWF  文件  file:/// F:/FlexPaper1.5.0flash  /FlexPaperViewer.swf  不能访问本地资源  FusionCharts.swf。只有仅限于文件系统的  SWF  文件和 可信的本地  SWF  文件可以访问本地资源。 ” ,或者  IE  一直都处于加载状态,这种情况,是由于  Flexpaper  还 没 获 得  Adobe  Flash  的 信 任 , 这 时 你 可 以 请 访 问  http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.ht  ml#119065,选择始终允许,把 FlexPaper1.5.0flash 文件夹添加到信任列表中。 Flexpaper 例子解释(4.2 节)  在上述的例子中的几点解释: ajava.org 网站服务器、数据库、文件、页面编码都是是 UTF-8,所以才用 UTF-8 编码?其实不 是,Flex 就是基于 unicode 编码的,建议大家采用 UTF-8; Test.html 加载是引入 js/flexpaper_flash.js,flexpaper_flash.js 是处理 SWF 嵌入的脚本, 大家可以在 346 行增加一个 alert,显示 html 的值,看了就比较清楚。
设置 div 样式后,FlexPaperViewer 的位置会有变化,如 position:absolute 改成相对定位,top 改成 200px,大家就可以看到效果的不同。

Document loading..

此段代码为加载提示,如果没有调用到 FlexPaperViewer,会一直显示 Document loading var fp = new FlexPaperViewer( 'FlexPaperViewer','viewerPlaceHolder', { config : {……}}) 此段代码是创建一个 FlexPaperViewer,它在 flexpaper_flash.js 中有定义,共三个参数 config : { SwfFile : escape('FusionCharts.swf'),……}此段代码里包含对 FlexPaper 参数 的设置,详细请看下一节。 4.3 Flexpaper 参数说明 SwfFile (String) 需要使用 Flexpaper 打开的文档 Scale (Number) 初始化缩放比例,参数值应该是大于零的整数 ZoomTransition (String) Flexpaper 中缩放样式,它使用和 Tweener 一样的样式,默认参数值 为 easeOut.其他可选值包括: easenone, easeout, linear, easeoutquad ZoomTime (Number) 从一个缩放比例变为另外一个缩放比例需要花费的时间,该参数值应该为 0 或更大。 ZoomInterval (Number) 缩放比例之间间隔,默认值为 0.1,该值为正数。 FitPageOnLoad (Boolean) 初始化得时候自适应页面,与使用工具栏上的适应页面按钮同样的效 果。 FitWidthOnLoad (Boolean) 初始化的时候自适应页面宽度,与工具栏上的适应宽度按钮同样的 效果。 localeChain (String) 设置地区(语言),目前支持以下语言。 en_US (English) fr_FR (French) zh_CN (Chinese, Simple) es_ES (Spanish) pt_BR (Brazilian Portugese) ru_RU (Russian) fi_FN (Finnish) de_DE (German) nl_NL (Netherlands) tr_TR (Turkish) se_SE (Swedish) pt_PT (Portugese) el_EL (Greek) da_DN (Danish) cz_CS (Czech) it_IT (Italian) pl_PL (Polish) pv_FN (Finnish) hu_HU (Hungarian) FullScreenAsMaxWindow (Boolean) 当设置为 true 的时候, 单击全屏按钮会打开一个 flexpaper 最大化的新窗口而不是全屏, 当由于 flash 播放器因为安全而禁止全屏,而使用 flexpaper 作为 独立的 flash 播放器的时候设置为 true 是个优先选择。 ProgressiveLoading (Boolean) 当设置为 true 的时候,展示文档时不会加载完整个文档,而是 逐步加载,但是需要将文档转化为 9 以上的 flash 版本(使用 pdf2swf 的时候使用-T 9 标签)。 MaxZoomSize (Number) 设置最大的缩放比例。 MinZoomSize (Number) 最小的缩放比例。 SearchMatchAll (Boolean) 设置为 true 的时候,单击搜索所有符合条件的地方高亮显示。 InitViewMode (String) 设置启动模式如"Portrait" or "TwoPage". ViewModeToolsVisible (Boolean) 工具栏上是否显示样式选择框。 ZoomToolsVisible (Boolean) 工具栏上是否显示缩放工具。 NavToolsVisible (Boolean) 工具栏上是否显示导航工具。 CursorToolsVisible (Boolean) 工具栏上是否显示光标工具。 SearchToolsVisible (Boolean) 工具栏上是否显示搜索。 对比本例子中的参数设置: SwfFile : escape('FusionCharts.swf'),//加载的 SWF 文件为 FusionCharts.swf Scale : 0.6, //初始化缩放比例为 0.6,即 60% ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true,//加载时自动适应页面 FitWidthOnLoad : false, //加载时自动适应页面宽度 FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.2, //页面最小可缩小成 20% MaxZoomSize : 5, //页面最大可放大成 500% SearchMatchAll : false, InitViewMode : 'Portrait', PrintPaperAsBitmap : false, ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'en_US' //设置地区(语言)为 en_US 上面带注解的参数为我们经常设置的参数,下面我们来简单演示一下几个参数改变的效果: FitWidthOnLoad : false 改成 true MaxZoomSize : 5 改成 1 localeChain: 'en_US'改成'zh_CN' 通过本章的介绍,大家应该可以简单的使用 Flexpaper 了,下一章我们将介绍 Flexpaper 二次开 发。 大家通过前几章内容已经基本可以简单的使用 Flexpaper 了,但某些时候,我们会觉得 FlexPaperViewer 的某些内容不适合显示出来,如 Flexpaper 的打印、官方介绍、logo 等,这时 候我们就需要对 Flexpaper 进行二次开发,修改 Flexpaper 的源码来达到效果。  5.1 Flexpaper 重点类包介绍 通过第二章中介绍的二次开发准备工作,我们可以看到 Flexpaper 的源码了, 1)caurina.transitions 为 actionscript 类包 2)com.devaldi 为 devaldi 公司开发的 Flexpaper 核心类包,如上图红色框部分。 其中:controls 为主控部分,events 为事件处理部分,skinning 为 UI 设置部分,streaming 为文件流处理部分。 3)FlexPaper_Resources.swc 为 com.devaldi 调用的资源库,我们可以看到一些 abc (ActionScript bytecode(字节码))文件,编译过看不到源代码,ABC 文件不可以单独运行, 必须放入 SWF(.swf)文件中才可以被 Flash Player 执行。 我们下面的例子中只涉及到 com.devaldi.controls 包文件的修改,其他文件的修改未涉及,各 位高手可以研究一下源码,看可否写出自己的插件,呵呵。Mark 连 Flex 菜鸟也不算,还没入门, 所以上述功能只是猜测,大家眼睛是雪亮的,欢迎指正。  5.2  增加(修改)自己的 mxml 应用程序 做完二次开发准备工作后,大家可以测试: a) 重新编译后会发现 bin-debug 有 ajavaflexpaper.swf,改名成 FlexPaperViewer.swf 后使用,刷新页面后发现空白页面,无任何效果。 b)把原有的 FlexPaperViewer.mxml 右键设置为默认应用程序,重新编译后,会 发现空白页面,无任何效果。 针对 a 点,我们先看看 ajavaflexpaper.mxml 里面没有作任何处理,所以显示空白页面是很正常的。 针对 b 点,我们看看 FlexPaperViewer.mxml 我们查找 bindStageEvents(e:Event)方法,发现没有获取 web 页面传递的 FlexPaper 参数处理方法, FlexPaperViewer_base.mxml 里有 getUrlParamaters() 方法,但发现 fullUrl 是 web 页面页面 URL 地址,不包含 FlexPaper 参数,具体 用法没研究。 通过几位朋友的文章介绍,mark 修改 ajavaflexpaper.mxml 如下 代码解释: applicationComplete="initApp();" - 为初始化时调用 initApp()方法 initApp() - 为获取 web 页面传递过来的 FlexPaper 参数、注册监听器 _xxxx:xxx - 存储 web 页面传递过来的 FlexPaper 参数 把上面代码的 st:GradientImageButton 部分代码注释掉就可以了 效果如下图: 这里的 st:GradientImageButton 调用的是 xmlns:st="com.devaldi.skinning.*包中的 GradientImageButton.as 文件,再调用其他文件的 printPaper(event)处理。 的代码: mx:Canvas width="100%" id="cnv_info" horizontalScrollPolicy="off" verticalScrollPo ...  5.4  删除、修改 Flexpaper 浏览器的 FP 关于我们按钮 a)删除 FP 关于我们按钮 我们可以在 FlexPaperViewer.mxml 中找到关于 FP 的代码: 此段代码不能通过注释来达到删除 FP 的效果,因为注释掉后会发现更多的问题,查找修改起来 更麻烦,所以我们通过查找 FlexPaperViewer.mxml 文件会找到下面三行代码,我们把它们注释 掉就可以达到效果。 //bttnInfo.visible = false; //bttnInfo.visible = (new MenuIcons.SMALL_TRANSPARENT().width > 10); //bttnInfo.visible = (new MenuIcons.SMALL_TRANSPARENT().width > 10); 效果如下图: 某些朋友提到在FlexPaperViewer.mxml源码中所有的bttnInfo.visible = true;  替换成  bttnInfo.visible = false;mark 测试过,好像不行,由于测试仓促,特别是上面的方 法已经 OK 了,没心再研究,大家有兴趣可以试试。 b) 修改 FP 关于我们按钮(设想) 我们打开 about.mxml 文件,可以看到里面的源码, 设想 1.如果我们可以修改目前 Resource 的值,可以吗,是不是可以改变 FP 提示框中显示的内 容? 设想 2.如果我们创建一些 Resource,修改 about.mxml 和 FlexPaperViewer.mxml 绑定的资源为 自己创建的资源,是不是可以改变 FP 提示框中显示的内容? 这些都只有等各位高手来测试,mark 不想研究了,也没时间,呵呵。  删除 Flexpaper 浏览器的 LOGO(5.5 节)  下面是某位高手的对 FlexPaperViewer  LOGO 的处理:  1.  去掉加载页的进度条的 LOGO 图片 源文件:DupImage.as  找到语句:private var _skinImgl:Bitmap = new MenuIcons.LOGO_SMALL();  替换为: private var _skinImgl:Bitmap = new Bitmap();  2.  去掉工具栏最右边[关于...]对话框的显示的按钮 源文件:FlexPaperViewer.mxml  将源码中所有的 bttnInfo.visible = true;  替换成  bttnInfo.visible = false;  3.  除去初始装载时的 LOGO 图标 源文件:FlexPaperViewer.mxml  将控件 lblProgress 和 spin1 的初始属性分别加入: visible="false"  4.  除去加载页的 LOGO 图标 源文件: FlexPaperViewer.mxml  将的属性最后行加入 creationComplete 处理:    然后加入处理 initApp()函数到中  //­­­­­­­­­­­­­­­­­­­­­­­­­­­二次编程加入  public function initApp():void {  paper1.removeElementAt(2);  }  最后将源码中的函数 papersLoadingHandler(event:Event)最后一行加 上:paper1.removeElementAt(2);  Mark 只测试过第四点,在 FlexPaperViewer.mxml 文件中找到下面的方法,并在 最后一行加入 paper1.removeElementAt(2);结果可以达到去掉 FlexPaperViewer 右下角 的 logo。 protected override function papersLoadingHandler(event:Event):void{ //mark edit 2012-1-25 // spin1.start(); // spin1.visible = true; spin1.visible = false; super.papersLoadingHandler(event); //mark add 2012-1-25 paper1.removeElementAt(2); } 效果如下:  5.6  解决中文 SWF 不能读取问题 这里的中文 SWF 不能读取问题是指:当 SWF 文件名为中文时,FlexpaperViewer 不能读取到指定 的 SWF 文件,会显示一直处于加载中。这个问题是 mark 最需要解决的,因为ajava.org 网站的 PDF 基本都是中文名,如果都要改成英文名,那处理起来会很麻烦。 我们先作下面的测试: 测试一、在 windows xp 系统下,test.html、flexpaper_flash.js 无任何改动,将上面的 ajavaflexpaper.swf 改名为 FlexpaperViewer.swf(或使用原有的),test.html 中 SwfFile : escape('中文 ajava.swf') 结果:FlexpaperViewer 无法加载中文 SWF。 测试二、在 windows xp 系统下,test.html、flexpaper_flash.js 的文件编码都是 utf-8(文本 编辑器中另存时选择编码为utf-8), 将上面的ajavaflexpaper.swf改名为FlexpaperViewer.swf (或使用原有的),test.html 中 SwfFile : escape('中文 ajava.swf') 结果:FlexpaperViewer 无法加载中文 SWF。 测试三、在 windows xp 系统下,test.html、flexpaper_flash.js 的文件编码都是 utf-8(文本 编辑器中另存时选择编码为utf-8), 将上面的ajavaflexpaper.swf改名为FlexpaperViewer.swf (或使用原有的), test.html 中 SwfFile : decodeURI('中文 ajava.swf'), flexpaper_flash.js 中第 24 行增加 decodeURI,SwfFile : decodeURI(config.SwfFile), 结果:FlexpaperViewer 可以加载中文 SWF。 测试四、在 windows 2003 系统下,按顺序测试上面的 1-3 结果:三种情况 FlexpaperViewer 都不可以加载中文 SWF。 测试五、在 linux 系统下,按顺序测试上面的 1-3 结果:三种情况 FlexpaperViewer 都不可以加载中文 SWF。 从上面的测试结果来看,中文 SWF 在 windows 2003 系统、linux 系统中使用中文 SWF 无论是使 用原有的还是 ajavaflexpaper.swf 改名的 FlexpaperViewer.swf,都不能解决加载中文 SWF 问 题。 我们采用以下的方法来寻求解决之道:查找 FlexpaperViewer.mxml、 FlexpaperViewer_base.mxml 文件, 找出 SwfFile 相关的内容, 通过 Alert.show()方法显示出来, 检查是哪里的问题。 主要检查要注意的代码有: Ajavaflexpaper.mxml - initApp() FlexpaperViewer_base.mxml - loadSwf(s:String) FlexpaperViewer_base.mxml - toggleFullScreen() FlexpaperViewer_base.mxml - getUrlParamaters() Viewer.as - set SwfFile(s:String) 通过检查上述方法,会发现无法加载中文 SWF 问题的原因是: Web 页面中 SwfFile : escape('中文 ajava.swf ')参数与 Viewer.as - set SwfFile(s:String) 方法中的参数处理导致问题。 Mark 作了以下修改: 1. test.html、flexpaper_flash.js 的文件编码都是 utf-8 2. test.html 中 SwfFile : escape('中文 ajava.swf ')改为 SwfFile : decodeURI('中文 ajava.swf ') 3. Viewer.as - set SwfFile(s:String)方法中,修改如下代码: ------------------------------------------------------------------- if(EncodeURI) s = unescape(s); 改为 if(EncodeURI) s = decodeURI(s); -------------------------------------------------------------------- if(!pagesSplit){ _swfFile = s; if(EncodeURI) _swfFile = encodeURI(s); else _swfFile = s; } else _swfFile = s; 改为 _swfFile = s; 修改完成后,重新编译,在 3 种测试环境中测试,会发现中文 SWF 可以加载了,呵呵。 假如你的中文 SWF 文件是放在中文文件夹中,那可以读取到吗?答案是 YES,没问题,你可以自 己试试^_^ 关于 SWF 中文名中特殊字符的使用  1)系统禁止使用:  /  \  *  ?  <    >    |  2)英文符号  %    &    '    +  不可用,  3)中文符号  %    &    '    +  不可用,可用 、 ? 《 》  4)要注意英文大小写的不同  5.7 Flexpaper 二次开发的一些常见错误及解决 无论你使用 Flexpaper 的 swc 版本的源码进行开发,还是下载源码进行二次开发,可能遇到一些 问题,mark 将遇到的一些问题总结一下: 问题 1:仅主题为“halo”的类型“mx.containers.VBox”支持样式“borderThickness”。 FlexPaperViewer_Base.mxml/flexpaper/src/com/devaldi/controls/flexpaper 第 15 行 Flex 问题 解决:右键项目,选择属性,在 flex4 编译器的 Flex SDK 版本中选择使用 flex3 兼容模式。 问题 2:F:\flashb4\Adobe Flash Builder 4\sdks\4.0.0\frameworks\libs\spark.swc 的依赖 项 spark.skins.spark.VScrollBarSkin 支持的版本最低为 4.0.0,高于兼容版本 3.0.0。 flexpaper 未知Flex 问题 解决:因为选择你下的 Flexpaper 版本使用了 spark.swc,所以不能使用 flex3 兼容模式。 问题 3:无法为区域设置“zh_CN”解析资源束“FlexPaper”。 flexpaper 未知 Flex 问题 解决:因为编译器找不到“zh_CN”资源,可检查你安装的 Flash Builder 的 sdks\xxx\frameworks\locale 是否有对应的的文件,xxx 为你选择的编译器 Flex SDK 版本。你 可以在编译器中添加-locale zh_CN -source-path=locale/{locale} -keep-all-type-selectors=true 参数,指定采用的 locale 为 Flexpaper 根目录下的 locale。 问题 4:页面如何动态显示 SWF 文件 解决:在页面的 SwfFile : encodeURI('中文 AJAX.swf')改成 SwfFile : encodeURI(“你使用 的语言输出的 SWF 文件地址“),如 php:,java:<% out.print(url);%>, 要注意输出 URL 的编码处理。 问题 5:官方例子的页面不能显示 SWF 文件或提示沙箱错误。 解决:到 adobe 官方,增加 SWF 文件或上级目录到可信任列表,前文中有讲述。 问题 6:页面一直显示 Document loading.. 解决:检查是否有 falsh player 环境,检查 flexpaper_flash.js 的路径是否正确。 问题 7:调用 SWC 库、源代码进行开发,自建的 mxml 应用出现某些 flexpaper 参数错误 解决:要注意 SWC 库、源代码的版本,有些版本的参数有所变动,最好看看官方的文档。 问题 8:源码修改、test.html 里面的参数、JS 都没问题,但是设置参数参数后没效果。 解决:出现这种情况要注意自己创建的 mxml 应用程序中的 id 名称,因为 JS 里调用的是 id 名为 FlexPaper,所以 mxml 应用程序的 名称要相同,如果想改,应该要 JS、html、mxml 中统一修改。  5.8. Flexpaper 重新编译、打包 编译: 我们每次保存、 运行、 调试、 刷新, Flexpaper 项目都会重新编译, 每次操作后会发现 bin‐debug  的 ajavaflexpaper.swf 会更新。 打包:经过重新编译,会发现 bin‐debug/ajavaflexpaper.swf 的文件比较大,一般都有 900kb 左右, 对比官网的 FlexPaperViewer.swf,会发现官网的才 500kb 左右。我们只需选择导出方式生成发行 版,就可以优化 SWF,生成的 SWF 文件较小。过程如下:  1)右键项目,选择导出,会出现导出提示框,列表中选择“Flash Builder”‐>“发行版” 选择导出的项目和应用程序,可以设置导出 SWF 存放的文件夹 开始生成 SWF 文件 生成完毕后,可以看到  bin‐release  文件夹下有  ajavaflexpaper.swf,复制到其他地方,更改名为  FlexPaperViewer.swf 就可以使用 后记 在最后我要感谢一下寒冷的天气,如果不是今年天气特冷,mark 也不会完成 ajava.org 网站功能 后继续躲在家里写这篇教程。希望大家读完这篇基础教程,可以对 FlexPaper 有更深的了解,开 始进入 FlexPaper 更深层次的研究。 以后 mark 还会不会继续研究 FlexPaper?答案是 NO,如果不是 ajava.org 网站的需要,mark 是不 会去认识、了解 FlexPaper,因为 makr 除了是只菜鸟还是条大懒虫。 本教程中只涉及到很简单的使用,一般大家可能还会涉及到上传、PDF 转换 SWF、自动转换、页 面转换、PDF 文字抽取、抽取中文问题处理等等,要实现其中一些或整套功能,只能靠大家了, 期待各位的好作品。 最后宣传一下,本教程是由 ajava.org 独立 JAVA 社区的mark 编写,大家转载请保留出处并保留完 整的版本,欢迎大家来 ajava 灌水、交朋友。 感谢:mark  发布者: mark|原作者: mark|来自: ajava.org 原文:http://ajava.org/article‐684‐1.html
还剩37页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

kevlin635

贡献于2014-04-19

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf