Flex阅读器是一款由Devaldi开发的(Free)Flex程序库,它的功能是将服务器上的swf文件通过它生成的控件在浏览器上以类似PdfReader进行展示。可用它来制作精美的电子杂志和在线电子读物。
Flex阅读器安装及编程
-
在(http://flexpaper.devaldi.com/)下载FlexPaper SWC,将FlexPaper_SDK4.swc拷贝到你的Flex项目libs中即可
-
一个简单的例子,复制你的SWF到你的bin-debug目录,如man.swf,添加FlexPaper组件到你的flex代码中
-
Flex代码
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="800" height="500" xmlns:flexpaper="com.devaldi.controls.flexpaper.*"> <flexpaper:FlexPaperViewer width="800" height="500" Scale="1" SwfFile="man.swf" /> </mx:Application>
-
使用技巧
(以下 mybook为FlexPaperViewer 的ID)
除去打印控件图标
在初始化组件事件处理函数中加入
mybook._FlexPaperViewer_GradientImageButton1.visible=false;
也可以除去整个工具栏
mybook.removeElementAt(0);
除去LOGO图标
在初始化组件事件处理函数中且在文档加载处理函数中加入(removeElementAt(2)为LOGO组件)
var A:Object=mybook.getChildAt(1);
A.removeElementAt(2);
也可以写为(paper1为页面组件id):
mybook.paper1.removeElementAt(2);
将工具栏的位置放入页面的底部
在初始化组件事件处理函数中加入
mybook.removeElement(mybook.paper1);
mybook.addElementAt(mybook.paper1,0);
-
参数: (以下参数可用于FlexPaper)
-
SwfFile(String)
打开Swf文件
-
Scale(Number)
放大因子,是一个0以上的数(带小数 1 = 100%) 。
-
ZoomTransition(String)
光学变焦过渡,默认值是easeOut,可取值: easenone, easeout, linear, easeoutquad
-
ZoomTime(Number)
时间过渡让变焦达到新的放大因子,值为0或更大的数。
-
ZoomInterval(Number)
区间的滑动缩放。放大因子缺省值是0.1。如同在工具栏上使用滑动条按钮的效果。
-
FitPageOnLoad(Boolean)
(布尔) 适合初始页大小(依高度而定)的装载页。如同在工具栏上使用fit-page按钮的效果。
-
FitWidthOnLoad(Boolean)
(布尔)适合初始页宽度大小的装载页。如同在工具栏上使用fit-width按钮的效果。
-
llocaleChain(String)
设置语言。
目前支持以下语言:
en_US(英语)
fr_FR(法国)
zh_CN(中国、简体)
es_ES(西班牙)
pt_BR(巴西葡萄牙语)
ru_RU(俄罗斯)
fi_FN芬兰
de_DE(德国)
nl_NL(荷兰)
tr_TR(土耳其)
se_SE(瑞典)
pt_PT(葡萄牙)
el_EL(希腊)
da_DN(丹麦)
cz_CS(捷克)
it_IT(意大利)
pl_PL(波兰)
pv_FN芬兰
hu_HU(匈牙利)
-
FullScreenAsMaxWindow(Boolean)
(布尔)以最大化方式打开一个新浏览器窗口。
-
ProgressiveLoading(Boolean)
(布尔) 将视本地负荷情况逐步地下载显示文档,而不是下载完后再显示。至少Flash9 以上版本的SWF生成文档
-
MaxZoomSize(Number)
(数值) 最大允许设置缩放等级
-
MinZoomSize(Number)
(数值) 允许设置最小缩放等级
-
SearchMatchAll(Boolean)
(布尔) 当被设置为真时,可执行搜索功能。
-
InitViewMode(String)
(字符串) 设置启动视图模式。例如“Portrait”或“TwoPage”。
-
ViewModeToolsVisible(Boolean)
(布尔)显示或隐藏视图模式与工具栏
-
ZoomToolsVisible(Boolean)
(布尔) 从工具栏显示或隐藏变焦工具
-
NavToolsVisible(Boolean)
(布尔)显示或隐藏导航工具
-
CursorToolsVisible(Boolean)
(布尔) 显示或隐藏光标工具
-
SearchToolsVisible(Boolean)
(布尔)显示或隐藏的搜索工具
-
下面例子可以通过参数的使用预编译的flash版
var fp = new FlexPaperViewer( 'FlexPaperViewer', 'viewerPlaceHolder', { config : { SwfFile : "Paper.swf", Scale : 0.6, ZoomTransition : "easeOut", ZoomTime : 0.5, ZoomInterval : 0.1, FitPageOnLoad : false, FitWidthOnLoad : false, PrintEnabled : false, FullScreenAsMaxWindow : true, ProgressiveLoading : true, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : 'Portrait', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain : "zh_CN" }});
-
函数功能
-
.gotoPage(Number pageNumber)
定位到你指定的页面
-
.fitWidth()
适合宽度设置模式
-
.fitHeight()
适合高度模式
-
.loadSwf(String swffile)
载入一个新文件
-
.getCurrPage()
载入一个页为当前页
-
.nextPage()
下一页为当前页
-
.prevPage()
移动到前一页
-
.Zoom(Number factor)
变焦到指定的大小因子
-
.searchText(String text)
搜索指定的文本
-
.switchMode(String mode)
开启观赏模式。"Portrait", "Two Page", "Tile" // “肖像模式”、“两个页面”、“平铺”
-
.printPaper()
文件打印
-
.highlight(String url)
高亮突出链接地址
-
.postSnapshot(String url)
网页“快照”文档指定的url
-
Events事件
-
onDocumentLoaded (no arguments)
文档完成装载时
-
onDocumentLoadedError (String errormessage)
文档完成装载错误发生时
-
onProgress (Number bytesloaded, Number bytestotal)
文档装载时的过程中(装入的字节)
-
onCurrentPageChanged (Number pagenumber)
当当前页面发生改变时
-
onExternalLinkClicked (String link)
当一个用户点击一个外部链接。
(Only works when supplying argument "-s linknameurl" in conversion with PDF2SWF)
-
onDocumentPrinted (no arguments)
当一个文件已完成打印时
服务器端的SWFTools
为了让PlexPaper能运行首先得要有SWF文件,而在服务器内常使用开源的SwfTools自动完成这种转换, SWFTools 是一组用来处理 Flash 的 swf文件的工具包,包括:
1. 合并工具 swfcombine
2. 抽取工具 swfextract
3. PDF/JPEG/PNG/AVI/TTF/WAV 到 SWF 的转换工具 :pdf2swf, jpeg2swf, png2swf, avi2swf, font2swf, and wav2swf|
4. 文本解析工具 swfstrings
5. SWF 解析器 swfdump
6. SWF 读写库 rfxswflib
-
一个简单的将PDF文档转成SWF的用法:
windows C:\SWFTools\pdf2swf 源文件.pdf -o 目标文件.swf -f -T 9
linux /usr/local/bin/pdf2swf $pdfFile -o $swfFile -f -T 9 -t -s storeallcharacters > /dev/null
-
PDF2SWF转换文件参数
-h , --help 打印帮助短消息并退出
-V , --version 打印版本信息并退出
-o , --output file.swf 直接输出到文件。如果文件名为(file%.swf)输出每页为单独的文件。输出文件为:file[1-n].swf
-p , --pages range 仅转换中的页面范围与范围例如 1-20 or 1,4,6,9-11
-P , --password password 使用密码破译加密的pdf文件。
-v , --verbose 显示详细信息。
-z , --zlib 使用flash 6 MX压缩和解压缩。
-i , --ignore 允许pdf2swf更改pdf的绘制顺序。
-j , --jpegquality quality 设置嵌入jpeg图片的质量,以质量。 0质量最差,100质量最佳。缺省值:85
-s , --set param=value 设置SWF编码器的特定参数。
-w , --samewindow 在转换为pdf的超链接时,不让链接打开一个新窗口。
-t , --stop 在每页中插入停止命令。
-T , --flashversion num 设置Flash版本。
-F , --fontdir directory 添加到搜索字体的路径目录。
-b , --defaultviewer 添加到搜索路径的字体目录。
-l , --defaultloader 一个标准的预加载器swf文件的链接加载。
-B , --viewer filename 查看器文件名以swf文件的链接。
-L , --preloader filename 预加载器文件名以swf文件的链接。
-q , --quiet 取消正常的消息,也可使用-qq取消警告。
-S , --shapes 不使用SWF的字体,但一切都存储为形状。
-f , --fonts 存储完整的字体在SWF。不减少使用的字符。
-G , --flatten 尽可能从文件中删除尽可能多的剪贴图层。
-I , --info 不做实际的转换,只显示在PDF中所有页面的列表。
-Q , --maxtime n 在n秒后,中止转换。仅Unix可用。
-
下面的4个常用的参数意义:
-f 字体应该嵌入,提高可检索的文档
-T 设定目标flash版到9,提高稳定性
-t 每一帧之间插入一个停止,提高稳定性
-s storeallcharacters 存储文档中的所有字符文本的信息,提高了可搜索性
可选参数:
-G14 使文件更小、更快的渲染
-s subpixels=1.5 subpixels = 1.5 在文档中调整图像分辨率。
在某些情况下应使用文件含有丰富的大的图像。
值(1.5),可以尝试要求质量档案。
请参阅http://wiki.swftools.org/index.php/Pdf2swfhttp://wiki.swftools.org/index.php/Pdf2swffor
一个完整的PDF2SWF例子。
-
Linux下源码编译安装 SwfTools
安装swftools 及其编译支持库(jpegsrc,freetype)
1.安装jpegsrc.v7.tar.gz
tar -zxvf jpegsrc.v7.tar.gz
cd jpeg-7
./configure
make
make install
2.安装freetype-2.3.12.tar.gz
tar -zxvf freetype-2.3.12.tar.gz
cd freetype-2.3.12
./configure
make
make install
3.安装swftools-2011-01-23-1815.tar.gz
tar -zxvf swftools-2011-01-23-1815.tar.gz
cd swftools-2011-01-23-1815
ldconfig /usr/local/lib
./configure
make
make install
编程实例
(以下的应用实例仅为参考,如要真正运行服务器端需要本人的写的flexsys_class 类库支持的运行环境)
-
XML定义文件: (sysbooks.xml)
<?xml version="1.0" encoding="utf-8"?> <root> <title label="技术文档" key=""> <node label="服务器安装手册" key="serverMan.swf" pdfFile="服务器安装手册.pdf"/> </title> <title label="帮助文档" key=""> <node label="信贷档案操作说明" key="xdarMan.swf" pdfFile="信贷模块操作说明.pdf"/> </title> <title label="信贷资料" key=""> <node label="信贷资料管理系统实施方案" key="xdarMan1.swf" pdfFile="信贷资料管理系统实施方案.pdf"/> </title> </root>
-
客户端程序: (sysbooks.mxml)
<?xml version="1.0" encoding="utf-8"?> <mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="100%" height="100%" mouseMove="vrule1_mouseMoveHandler(event)" mouseUp="vrule1_mouseUpHandler(event)" xmlns:flexpaper="com.devaldi.controls.flexpaper.*" creationComplete="initApp()"> <fx:Style source="flex_root.css" /> <fx:Script> <![CDATA[ import mx.collections.*; import mx.controls.Alert; import mx.events.DragEvent; import mx.events.ListEvent; import mx.managers.CursorManager; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mylib.*; public var Ocookies:MyCookies; [Bindable] public var http_server:String; [Bindable] private var userKey:String; [Bindable] private var xmldoc:XML; [Embed(source="images/resizeCursorH.gif")] public var Movecus:Class; private var cursorID:int; private var moveCursorFlag:Boolean=false; public var pdf_filename:String=""; public function initApp():void { Ocookies=this.parentApplication.Ocookies; http_server=Ocookies.ServerAddr; userKey=Ocookies.UserInfo.user_key; search_xml.send(); //除去打印控件图标 mybook._FlexPaperViewer_GradientImageButton1.visible=false; //也可以除去整个工具栏 mybook.removeElementAt(0); //除去LOGO图标 var A:Object=mybook.getChildAt(1); A.removeElementAt(2); } //Cursor控制--------------------------------------------------------- protected function vrule1_mouseOverHandler(event:MouseEvent):void{ cursorID = CursorManager.setCursor(Movecus,2,-10,-10); } protected function vrule1_mouseOutHandler(event:MouseEvent):void{ CursorManager.removeCursor(cursorID); } protected function vrule1_mouseDownHandler(event:MouseEvent):void{ moveCursorFlag=true; } protected function vrule1_mouseUpHandler(event:MouseEvent):void{ moveCursorFlag=false; } protected function vrule1_mouseMoveHandler(event:MouseEvent):void{ if(!moveCursorFlag) return; myTree.width=event.stageX - 5; if(myTree.width<100){ myTree.width=100; moveCursorFlag=false; } if(myTree.width>500) myTree.width=500; } //---------------------------------------------------------Cursor控制 public function handleFault(event:FaultEvent):void{ Alert.show(event.fault.faultString , "通信错误"); } //装入 public function fsearch_xml(event:ResultEvent):void{ xmldoc=XML(event.result); myTree.validateNow(); for each(var item:XML in myTree.dataProvider) myTree.expandChildrenOf(item,true); } protected function myTree_changeHandler(event:ListEvent):void{ var data:Object=myTree.selectedItem; var sFile:String=data.@key; if(sFile!=""){ var pdfFile:String=data.@pdfFile; var sGet:String="?pdfFile="+pdfFile+"&swfFile="+sFile; mybook.SwfFile=http_server+"/flex_root/PHP/sys/getHelpPDF.php"+sGet; } //除去LOGO图标 var A:Object=mybook.getChildAt(1); A.removeElementAt(2); } ]]> </fx:Script> <fx:Declarations> <mx:HTTPService id="search_xml" url="{http_server}/flex_root/PHP/sys/sysbooks.xml" method="POST" showBusyCursor="true" result="fsearch_xml(event)" fault="handleFault(event)" resultFormat="e4x"> </mx:HTTPService> </fx:Declarations> <s:HGroup width="100%" height="100%" gap="0" x="0" y="0"> <mx:Tree id="myTree" width="180" height="100%" dataProvider="{xmldoc.title}" labelField="@label" change="myTree_changeHandler(event)"> </mx:Tree> <mx:VRule height="100%" tabEnabled="true" mouseOver="vrule1_mouseOverHandler(event)" mouseOut="vrule1_mouseOutHandler(event)" mouseDown="vrule1_mouseDownHandler(event)" /> <s:BorderContainer width="100%" height="100%" backgroundColor="#cccccc"> <flexpaper:FlexPaperViewer id="mybook" width="100%" height="100%" FitPageOnLoad="true" Scale="1" SwfFile="" /> </s:BorderContainer> </s:HGroup> </mx:Module>
-
服务器端程序: (getHelpPDF.php)
<?php //获得PDF文件至swf文件的转换 function __autoload($class_name) { require_once($class_name . '.php'); } $oSYS=new flexsys_class(); $SysDataPath=$oSYS->BASE_data; $name=iconv("utf-8","gb2312//IGNORE",$_GET["pdfFile"]); $pdfFile=$SysDataPath."/pubftp/help/".$name; $swfFile=$SysDataPath."/pubftp/help/".$_GET["swfFile"]; if(!file_exists($pdfFile)) exit; $pdfTime=filemtime($pdfFile); if(!file_exists($swfFile)){ $swfTime=0; }else{ $swfTime=filemtime($swfFile); } if($pdfTime > $swfTime){ if(PHP_OS=="Linux"){ @system("/usr/local/bin/pdf2swf $pdfFile -o $swfFile -f -T 9 -t -s storeallcharacters > /dev/null"); }else{ @system('"c:/usr/web_root/pdf2swf.exe" $pdfFile -o $swfFile -f -T 9 -t -s storeallcharacters'); } } echo $oSYS->downWebFile($swfFile); ?>
flexpaper 参数说明
Publish: February 8, 2012 Category: PHP,FlexPaper No Comments
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) | 工具栏上是否显示搜索。 |