FlexPaper二次开发问题及搜索高亮显示

原文:FlexPaper二次开发问题及搜索高亮显示

最近有个需求,做一个IT知识库,类似于文库,说到文库肯定会用到在线浏览文档了,所有在网上翻阅了一下类似豆丁的在线浏览器插件的资料,将其进行了二次开发,在这跟需要用到的朋友分享一下,下面部分内容用到有些前辈的博客内容,首次写博,写的不好之处请见谅。。。高手勿喷,O(∩_∩)O谢谢

1.前期准备工作

1.首先二次开发,当然前提是需要一份FlexPaper的源码。源码下载地址:

http://files.cnblogs.com/yimiao/FlexPaper.rar

2.由于开发需要Adobe Flash Builder,我用的版本是4.5的

在这里贴一篇关于Adobe Flash Builder4.5的下载及安装方面的博客供大伙参阅一下。博客:

http://blog.csdn.net/buptdavid/article/details/6880497

提供个key:1499-4181-9296-6452-2998-3656

准备工作做完之后,接着往下看:

2.源码修改

首先在flash builder中新建一个flex项目,第一步填写项目名称FlexPaperViewer,第二步直接默认,最后一步也无需更改。

1.1然后把你1步下载下来的源码解压。

1.2将这个文件直接拷贝到FlexPaperView项目中,如下图显示:

2. 1将项目下FlexPaperViewer/src/默认包/FlexPaperViewer.mxml文件内容换成:

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3                 xmlns:fp="com.devaldi.controls.flexpaper.*"
  4                 layout="absolute" width="100%" height="100%"
  5                 applicationComplete="initApp();">
  6
  7     <mx:Script>
  8         <![CDATA[
  9             import mx.controls.Alert;
 10
 11             public var _aid = 0;//文档ID
 12
 13             [Bindable]
 14             public var _Scale:Number = 1;//缩放比例
 15
 16             [Bindable]
 17             public var _SwfFile:String = "";//SWF文件路径
 18
 19             [Bindable]
 20             public var _ZoomTransition:String = "easeOut";
 21
 22             [Bindable]
 23             public var _ZoomTime:Number = 0.6;
 24
 25             [Bindable]
 26             public var _ZoomInterval:Number = 0.1;
 27
 28             [Bindable]
 29             public var _FitPageOnLoad:Boolean = false;//加载后适合高度
 30
 31             [Bindable]
 32             public var _FitWidthOnLoad:Boolean = false;//加载后适合宽度
 33
 34             [Bindable]
 35             public var _PrintEnabled:Boolean = false;//是否支持打印
 36
 37             [Bindable]
 38             public var _FullScreenAsMaxWindow:Boolean = true;//是否支付全屏
 39
 40             [Bindable]
 41             public var _ProgressiveLoading:Boolean = true;//是否延迟加载
 42
 43             [Bindable]
 44             public var _localeChain:String = "zh_CN";//语言
 45
 46             private var isFocus:Boolean = false;
 47
 48             //初始化参数
 49             private function initApp():void{
 50                 var params:Object = Application.application.parameters;
 51                 _Scale = getNumber(params, "Scale", 1);
 52                 _SwfFile = getString(params, "SwfFile", "Paper.swf");
 53                 _ZoomTransition = getString(params, "ZoomTransition", "easeOut");
 54                 _ZoomTime = getNumber(params, "ZoomTime", 0.8);
 55                 _ZoomInterval = getNumber(params, "ZoomInterval", 0.1);
 56                 _FitPageOnLoad = getBoolean(params, "FitPageOnLoad", false);
 57                 _FitWidthOnLoad = getBoolean(params, "FitWidthOnLoad", false);
 58                 _PrintEnabled = getBoolean(params, "PrintEnabled", true);
 59                 _FullScreenAsMaxWindow = getBoolean(params, "FullScreenAsMaxWindow", false);
 60                 _ProgressiveLoading = getBoolean(params, "ProgressiveLoading", true);
 61                 _localeChain = params["localeChain"];
 62
 63                 //注册事件监听
 64                 this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
 65                 this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
 66
 67                 //开放给外部(javascript)调用
 68                 ExternalInterface.addCallback("hasFocus", hasFocus);
 69                 //ExternalInterface.addCallback("focus", focus);
 70                 ExternalInterface.addCallback("setViewerFocus", setViewerFocus);
 71                 ExternalInterface.addCallback("gotoPage", gotoPage);
 72             }
 73
 74
 75
 76             private function onMouseOver(event:MouseEvent):void{
 77                 this.isFocus = true;
 78             }
 79
 80             private function onMouseOut(event:MouseEvent):void{
 81                 this.isFocus = false;
 82             }
 83
 84             public function hasFocus():Boolean{
 85                 //Alert.show("hasFocus");
 86                 return isFocus;
 87             }
 88
 89             public function setViewerFocus(isFocus:Boolean):void{
 90                 //Alert.show("setViewerFocus");
 91                 this.paperViewer.setViewerFocus();
 92             }
 93             public function gotoPage(p:Number):void{
 94                 this.paperViewer.gotoPage(p);
 95             }
 96             /**
 97              *
 98              * 获取String类型参数
 99              * 如果没有,则返回默认值
100              **/
101             private function getString(params:Object, name:String, def:String):String{
102                 if(params[name] != null){
103                     return params[name];
104                 }
105                 return def;
106             }
107
108             private function getNumber(params:Object, name:String, def:Number):Number{
109                 if(params[name] != null){
110                     return params[name];
111                 }
112                 return def;
113             }
114
115             private function getBoolean(params:Object, name:String, def:Boolean):Boolean{
116                 //Alert.show("比较:"+name);
117                 if(params[name] != null){
118                     return params[name] == "true";
119                 }
120                 return def;
121             }
122         ]]>
123     </mx:Script>
124
125     <fp:FlexPaperViewer id="paperViewer"
126                         width="100%"
127                         height="100%"
128                         Scale="{_Scale}"
129                         SwfFile="{_SwfFile}"
130                         ZoomTransition="{_ZoomTransition}"
131                         ZoomTime="{_ZoomTime}"
132                         ZoomInterval="{_ZoomInterval}"
133                         FitPageOnLoad="{_FitPageOnLoad}"
134                         FitWidthOnLoad="{_FitWidthOnLoad}"
135                         PrintEnabled="{_PrintEnabled}"
136                         FullScreenAsMaxWindow="{_FullScreenAsMaxWindow}"
137                         ProgressiveLoading="{_ProgressiveLoading}" />
138 </mx:Application>

2.2替换内容之后,运行程序,会出现如下一个错误:

点击这个错误,跳到错误语句那里,然后将其删除,不会影响程序

2.3

再运行程序,浏览器就能显示出来了

3.样式修改

3.1:去除右上角Logo,以及右下角logo

--1.去右上角logo,首先打开FlexPaperViewer.mxml文件,搜索bttnInfo,一共就三句,全部注释掉。然后再运行,就会发现右上角的logo就没了

--2.右下角Logo

打开Viewer.as文件,找到createDisplayContainer这个函数。在addChild(_skinImgDo);后面加入_skinImgDo.visible = false;(虽然不懂,但是这些看看也都能知道个大概),再运行的时候发现右下角的Logo也不见了

--3:去打印按钮

去右上角logo,首先打开FlexPaperViewer.mxml文件,搜索print,将这行注释或者删除,打印按钮也消失了

3.2:修改样式或者删除工具栏里面的按钮都可以在FlexPaperViewer.mxml文件里进行相应的操作

感觉工具栏里面的图标不好看的话,可以在网上down一些小图标然后拷贝到assets这个文件夹里面,然后将原来的图标的名字换到你的图标里面就行了

这是我换过图标的样子,大家也都可以更换一下,根据自己的喜好换换。原先的感觉太死板不怎么好看

3.3:当鼠标移到工具栏上的图标时,上面显示英文提示:如果想换成中文的话,找到文件夹路径locale/en_Us/FlexPaper.properties的这个文件,修改对应的提示如下所示:

 1 # locale/en_US/FlexPaper.properties
 2 Print=打印
 3 FitWidth=自适应宽度
 4 FitPage=自适应高度
 5 Scale=缩放
 6 ThumbView=多页显示
 7 CurrentPage=当前页
 8 Search=搜索
 9 NextPage=下一页
10 PreviousPage=上一页
11 Fullscreen=全屏显示
12 About=About
13 Finishedsearching=文档搜索完成,没有找到更多的匹配项!
14 Searchfinished=搜索完成
15 Selectprintrange=Select print range
16 All=All
17 CurrentPage=当前页
18 Pages=Pages:
19 Enterpagenumbers=Enter page numbers and/or page ranges separated by commas. For example 1,3,5-12
20 Cancel=Cancel
21 IncorrectRange=Incorrect Range
22 Incorrectrangespecified=Incorrect range specified
23 About=About
24 Developedby=Developed by Devaldi.
25 Formoreinformation=For more information, see
26 CopyText=Copy Text
27 TwoPage=两页显示
28 SinglePage=单页显示
29 FirstPage=首页
30 LastPage=尾页

4.高亮显示问题:

修改之后的浏览器搜索内容时,不会出现高亮显示,这是为什么呢,有的朋友可能发现,自带的文件Paper.swf就可以,为什么自己生成的swf文件不可以呢?

这个原因是因为你使用SWFTools里面这个转换工具pdf2swf.exe时,参数没给,  string argsStr = PDFFilePath + " -o " + targetPath + " -T 9 -f";,加上-f就可以查找时高亮显示了

 

另附上pdf2swf.exe详细参数:

其中把pdf转成swf的工具就是pdf2swf了。在命令行中运行pdf2swf src.pdf des.swf一般能满足需求。而命令行参数可以通过pdf2swf -f得到:

-h , –help                      Print short help message and exit              打印帮助信息
-V , –version                Print version info and exit                        打印版本号
-o , –output file.swf         Direct output to file.swf. If file.swf contains ‘13568621′ (file13568630.swf), then each page指定输出的swf文件名
-p , –pages range             Convert only pages in range with range e.g. 1-20
or 1,4,6,9-11 or

指定转换的页面范围,使用的页码描述方法与打印机打印文件时候的选页一样

-P , –password password       Use password for deciphering the pdf.指定打开pdf的密码
-v , –verbose                 Be verbose. Use more than one -v for greater effect.转换时输出详细的内容
-z , –zlib                    Use Flash 6 (MX) zlib compression.使用Flash 6的zlib压缩机制
-i , –ignore                  Allows pdf2swf to change the draw order of the pdf. This may make the generated允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
-j , –jpegquality quality     Set quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)设置转换其中的jpeg图片的质量,从0到100,默认值是85。
-s , –set param=value         Set a SWF encoder specific parameter.  See pdf2swf -s help for more information.  设置SWF转码时候的参数,具体参数可以用pdf2swf -s help获取
-w , –samewindow              When converting pdf hyperlinks, don’t make the links open a new window.        设置转换后的swf打开原pdf中的连接时使用相同的窗口
-t , –stop                    Insert a stop() command in each page.            在每页结尾添加一个stop()命令
-T , –flashversion num        Set Flash Version in the SWF header to num.         设置SWF所使用的flash版本号
-F , –fontdir directory       Add directory to the font search path.                    指定字体文件所在路径
-b , –defaultviewer           Link a standard viewer to the swf file.             指定默认的swf导航文件,用来翻页、放大缩小等等
-l , –defaultloader           Link a standard preloader to the swf file which will be displayed while the main swf is loading.     指定默认的swf加载文件,用来显示加载进程效果
-B , –viewer filename         Link viewer filename to the swf file.   指定swf导航文件,作用同-b
-L , –preloader filename      Link preloader filename to the swf file.      指定swf加载文件,作用同-l
-q , –quiet                   Suppress normal messages.  Use -qq to suppress warnings, also.  不打印普通信息,用-qq就不打印警告信息。
-S , –shapes                  Don’t use SWF Fonts, but store everything as shape. 不使用字体,所有都转为形状。
-f , –fonts                   Store full fonts in SWF. (Don’t reduce to used characters). 在swf中保存全部字体。
-G , –flatten                 Remove as many clip layers from file as possible. 在文件中尽量去除影片层,合并它们
-I , –info                    Don’t do actual conversion, just display a list of all pages in the PDF. 不做实际转换,仅显示PDF的信息。
-Q , –maxtime n               Abort conversion after n seconds. Only available on Unix. 如果运行时间超时则退出。

 

基本上这个小插件的的二次开发就到这里了,写了这么多,感觉有点啰嗦。不过能帮助到大家还是很好的 

时间: 2024-09-20 03:08:12

FlexPaper二次开发问题及搜索高亮显示的相关文章

C#进行MapX二次开发之地图搜索

在GIS中,地标或者道路等信息查找是一项很重要的功能,类似于我们查找数据库记录那样,需要模糊 进行匹配,一般来说,找到需要的地标或者道路等地图元素后,双击可以定位到地图的具体位置,并放大 地图,类似于Google Map的Fly to功能. 由于地图的信息是按照层来存储的,所以我们查找信息 的时候,也是按照一层层来进行检索,由于MapInfo的地图一般有很多层,每层进行遍历会比较花费时间 ,所以一般的专业系统,都只是关系一部分层,我们通常在配置文件中指定感兴趣的层名集合,然后查找 的时候,在这些

关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单等相关问题

原文:关于FlexPaper 2.1.2版本 二次开发 Logo .打印.搜索.缩略图.添加按钮.js交互.右键菜单等相关问题 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash(一个工具,文档直接转flash,自带翻页搜索等一系列功能),由于无法与js进行交互,所以改用flexpaper. 由于之前没接触过Flex,了解不多,所以文章难免有不合适的地方.希望各位给予指正. 首先感谢ajava.org的mark,一系列文章有很多的帮助,少走很多弯路.   开发工具:1.Ado

海康威视web二次开发 录像搜索,总是提示搜索不到文件

问题描述 调用这个方法,总是提示搜索不到文件,在线等待中..有大神指教一下下吗? 解决方案 解决方案二:新人求指教..解决方案三:这个函数,貌似可以在浏览器上调试吧?个人感觉首先确认(海康威视的)服务器是不是好用,并且存在视频数据(尝试用浏览器链接一下?)解决方案四:服务器可用.我用ivms4200.就可以回调视频记录.这个是二次开发,用js写的.上面那个是官方提供的方法.但是不知道为啥总是提示"没有搜索文件"解决方案五:这个有点麻烦了,你调用的应该是activex组件吧,好像只能通过

关于海康SDK区域移动侦测智能搜索的二次开发

问题描述 各位大仙好:我现在通过海康SDK进行二次开发,如想从某一通道的摄像头回放录像或实时录像中,取一人从摄像头区域内经过的时间段(静止,没有人员走动的录像不需要,只要走动的那一段录像),应该怎么实现(实现步骤),或者具体用什么函数.最好给个实例,万分感谢. 解决方案 解决方案二: 解决方案三:海康威视摄像头.萤石摄像头二次开发巨多详细研发技术都在萤石开放平台,干货干货,全方位体验摄像头设备管理.视频直播.录像回放.视频广场.第三方微信服务号接入.流媒体服务.云存储服务.报警推送.智能分析等功

TFS二次开发WorkItem添加和修改、保存

WorkItemStore:表示跟踪与运行 Team Foundation Server的服务器的工作项客户端连接. A.添加 工作项 1.首先获得某服务器的WorkItemStore. WorkItemStore workstore = server.GetService<WorkItemStore>(); 2.然后通过对上面WorkItemStore获得Project项目. Project project = workstore.Projects["Calueng"];

TFS二次开发的第一个实例

首先我们需要认识TFS二次开发的两大获取服务对象的类. 他们分别为TfsConfigurationServer和 TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS API服务类.他们的区别如下: 基本上我们可以通过上面两个类对TFS操作所有功能点.下面我们先看看如何使用 TfsTeamProjectCollection获取特定团队集合下的所有项目,并且打印出项目名称. //取出团队集 合URI下的项目名称,如果团队集合为空则取默认集合下项目 //Uri tf

C#进行Visio二次开发之图纸设备信息的保存

在Visio的二次开发中,当发布图纸的时候,我们往往需要保存图纸和图纸的设备信息到数据库,图纸是将文件以二进制保存到数据库中,设备信息是保存图纸对应的Shape的各种自定义属性.本文主要介绍如何保存图纸背后的设备信息. 这里图纸的设备信息可以通过一个设备表如Device1来放置同一类型的设备信息,如负荷开关存放在Device1,架空线放在Device2等等,Device(n)是我们详细放置某种类型设备的表,其结构如下 另外主要我们再新建一个表来管理那种类型的设备对应那个表即可.如下图所示: 一旦

C#进行Visio二次开发之图纸打印

几种打印模式 Visio的二次开发中,我们往往需要打印文档,这也是正常不过的需求,Visio的Document对象提供了下面几种打印模式: Constant Value Description visPrintAll 0 Prints all foreground pages. visPrintCurrentPage 2 Prints the active page. visPrintCurrentView 4 Prints the current view area. visPrintFrom

.net项目的二次开发解决方案

公司原来项目的二次开发方式主要使用SQL,基本上也能满足客户的要求,优点是使用简单,只要熟悉SQL语句就可以操作,缺点是受限制太多,需要对数据库底层相当的了解,使用时容易出错,无法直接调用业务层代码等,研究了一下.net的动态编译,感觉用它来做二次开发效果应该不错的. 首先我们先做个demo来解释一下动态编译,下面这段代码的意思就是先组织一个源码字符串,然后编译执行. 动态编译简单代码 using System;using System.Collections.Generic;using Sys