Flex阅读器开发手册

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)

工具栏上是否显示搜索。

转载于:https://my.oschina.net/meSpace/blog/89168

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值