Flex阅读器是一款由Devaldi开发的(Free)Flex程序库,它的功能是将服务器上的swf文件通过它生成的控件在浏览器上以类似PdfReader进行展示。可用它来制作精美的电子杂志和在线电子读物。
在(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)
当一个文件已完成打印时
为了让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);
- ?>
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) |
工具栏上是否显示搜索。 |