原文: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文件内容换成:

 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:fp="com.devaldi.controls.flexpaper.*"
layout="absolute" width="100%" height="100%"
applicationComplete="initApp();"> <mx:Script>
<![CDATA[
import mx.controls.Alert; public var _aid = ;//文档ID [Bindable]
public var _Scale:Number = ;//缩放比例 [Bindable]
public var _SwfFile:String = "";//SWF文件路径 [Bindable]
public var _ZoomTransition:String = "easeOut"; [Bindable]
public var _ZoomTime:Number = 0.6; [Bindable]
public var _ZoomInterval:Number = 0.1; [Bindable]
public var _FitPageOnLoad:Boolean = false;//加载后适合高度 [Bindable]
public var _FitWidthOnLoad:Boolean = false;//加载后适合宽度 [Bindable]
public var _PrintEnabled:Boolean = false;//是否支持打印 [Bindable]
public var _FullScreenAsMaxWindow:Boolean = true;//是否支付全屏 [Bindable]
public var _ProgressiveLoading:Boolean = true;//是否延迟加载 [Bindable]
public var _localeChain:String = "zh_CN";//语言 private var isFocus:Boolean = false; //初始化参数
private function initApp():void{
var params:Object = Application.application.parameters;
_Scale = getNumber(params, "Scale", );
_SwfFile = getString(params, "SwfFile", "Paper.swf");
_ZoomTransition = getString(params, "ZoomTransition", "easeOut");
_ZoomTime = getNumber(params, "ZoomTime", 0.8);
_ZoomInterval = getNumber(params, "ZoomInterval", 0.1);
_FitPageOnLoad = getBoolean(params, "FitPageOnLoad", false);
_FitWidthOnLoad = getBoolean(params, "FitWidthOnLoad", false);
_PrintEnabled = getBoolean(params, "PrintEnabled", true);
_FullScreenAsMaxWindow = getBoolean(params, "FullScreenAsMaxWindow", false);
_ProgressiveLoading = getBoolean(params, "ProgressiveLoading", true);
_localeChain = params["localeChain"]; //注册事件监听
this.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
this.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); //开放给外部(javascript)调用
ExternalInterface.addCallback("hasFocus", hasFocus);
//ExternalInterface.addCallback("focus", focus);
ExternalInterface.addCallback("setViewerFocus", setViewerFocus);
ExternalInterface.addCallback("gotoPage", gotoPage);
} private function onMouseOver(event:MouseEvent):void{
this.isFocus = true;
} private function onMouseOut(event:MouseEvent):void{
this.isFocus = false;
} public function hasFocus():Boolean{
//Alert.show("hasFocus");
return isFocus;
} public function setViewerFocus(isFocus:Boolean):void{
//Alert.show("setViewerFocus");
this.paperViewer.setViewerFocus();
}
public function gotoPage(p:Number):void{
this.paperViewer.gotoPage(p);
}
/**
*
* 获取String类型参数
* 如果没有,则返回默认值
**/
private function getString(params:Object, name:String, def:String):String{
if(params[name] != null){
return params[name];
}
return def;
} private function getNumber(params:Object, name:String, def:Number):Number{
if(params[name] != null){
return params[name];
}
return def;
} private function getBoolean(params:Object, name:String, def:Boolean):Boolean{
//Alert.show("比较:"+name);
if(params[name] != null){
return params[name] == "true";
}
return def;
}
]]>
</mx:Script> <fp:FlexPaperViewer id="paperViewer"
width="100%"
height="100%"
Scale="{_Scale}"
SwfFile="{_SwfFile}"
ZoomTransition="{_ZoomTransition}"
ZoomTime="{_ZoomTime}"
ZoomInterval="{_ZoomInterval}"
FitPageOnLoad="{_FitPageOnLoad}"
FitWidthOnLoad="{_FitWidthOnLoad}"
PrintEnabled="{_PrintEnabled}"
FullScreenAsMaxWindow="{_FullScreenAsMaxWindow}"
ProgressiveLoading="{_ProgressiveLoading}" />
</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的这个文件,修改对应的提示如下所示:

 # locale/en_US/FlexPaper.properties
Print=打印
FitWidth=自适应宽度
FitPage=自适应高度
Scale=缩放
ThumbView=多页显示
CurrentPage=当前页
Search=搜索
NextPage=下一页
PreviousPage=上一页
Fullscreen=全屏显示
About=About
Finishedsearching=文档搜索完成,没有找到更多的匹配项!
Searchfinished=搜索完成
Selectprintrange=Select print range
All=All
CurrentPage=当前页
Pages=Pages:
Enterpagenumbers=Enter page numbers and/or page ranges separated by commas. For example ,,-
Cancel=Cancel
IncorrectRange=Incorrect Range
Incorrectrangespecified=Incorrect range specified
About=About
Developedby=Developed by Devaldi.
Formoreinformation=For more information, see
CopyText=Copy Text
TwoPage=两页显示
SinglePage=单页显示
FirstPage=首页
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. 如果运行时间超时则退出。

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

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

  1. flexpaper二次开发

    1.首先下载FlexPaper的源码.下载地址 2.本人不懂flash,只是百度下,然后自己瞎弄弄的.我用的flash build 4.5 提供个key:1499-4181-9296-6452-299 ...

  2. Flexpaper二次开发入门教程》(十) Flexpaper简单使用-第一个Flexpaper例子

    4. Flexpaper简单使用 通过上面三章的内容,大家对Flexpaper.SWFTools应该有大概的了解了,SWF文件也已经生成了,我们开始进入Flexpaper的使用的介绍. 本章中只演示F ...

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

    2015-03-02 更新文章,由于需求修改,更改了flexpaper插件,故增加第9.10.11小节,下载代码时请注意. 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash(一个 ...

  4. FlexPaper及二次开发

    Flexpaper二次开发入门教程 http://ajava.org/course/web/?page=2

  5. Civil 3D API二次开发学习指南

    Civil 3D构建于AutoCAD 和 Map 3D之上,在学习Civil 3D API二次开发之前,您至少需要了解AutoCAD API的二次开发,你可以参考AutoCAD .NET API二次开 ...

  6. WeCenter二次开发教程(一):熟悉模板结构

    <1>程序文件目录介绍: app – 应用目录 models – 模型目录 plugins – 插件目录 static – 静态文件 system – 系统目录 views – 模板目录 ...

  7. Android VLC播放器二次开发1——程序结构分析

    最近因为一个新项目需要一个多媒体播放器,所以需要做个视频.音频.图片方面的播放器.也查阅了不少这方面的资料,如果要从头做一个播放器工作量太大了,而且难度也很大.所以最后选择了VLC作为基础,进行二次开 ...

  8. Ecshop文件结构,二次开发

    文件结构,二次开发有用 ECShop 2.6.2 的结构图及各文件相应功能介绍 ECShop2.6.2 upload 的目录 ┣ activity.php 优惠活动列表 ┣ affiche.php 广 ...

  9. ecshop二次开发 给商品添加自定义字段

    说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. 抱着这种想法我在Ecshop的后台一顿找,不过肿么都木 ...

随机推荐

  1. 文件比较,文件夹比较-- vimdiff,beyond compare, compare suite, WinMerge,Kdiff3

    文件比较,文件夹比较-- vimdiff,beyond compare, compare suite, WinMerge,Kdiff3  有一个项目的源码包需要比较,400M以上,这就要找个好的工具了 ...

  2. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

  3. java学习笔记07--日期操作类

    java学习笔记07--日期操作类   一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...

  4. Threejs 的场景查看 - 几个交互事件库助你方便查看场景

    Threejs 的场景查看 - 几个交互事件库助你方便查看场景 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...

  5. RGB转为Lab空间

    虽然若干年前就看过了关于色彩空间的介绍,但是直到今天才自己动手写代码做这件事情.虽然网络上已经有很多现成的例子,但是一则仅仅适用于浮点型的数据,另一方面,在实现上也有一些尚可优化之处. 色彩模型除了最 ...

  6. c#中的jQuery——HtmlAgilityPack

    原文:c#中的jQuery--HtmlAgilityPack c#中是否有javascript中的jQuery类库? jQuery在访问和操作HTML 的DOM的便捷是前端开发工程师的一种福音,在c# ...

  7. hdu 1024(dp)

    传送门:Max Sum Plus Plus 题意:从n个数中选出m段不相交的连续子段,求这个和最大. 分析:经典dp,dp[i][j][0]表示不取第i个数且前i个数分成j段达到的最优值,dp[i][ ...

  8. Nagios监控系统的安装

    环境:centOS 6.5 X86 64位 nagios-4.08 步骤: 1.  最小化安装系统 2.  修改安全特性 关闭SELINUX     SELINUX=disabled 清除iptabl ...

  9. cocos2.2.3 HelloCpp TestCpp android 环境搭建 编译

    cygwin make PATH->E:\cygwin\bin JAVA_HOME->C:\Program Files\Java\jdk1.8.0_05 Eclipse->Windo ...

  10. 【VBA研究】查找目录以下全部文件的名称

    作者:iamlaosong 目录里面保存有面单扫描的图像文件,文件名称为邮件号码.如今想收集这些邮件号码,由于量非常大,不可能一个一个的截取,仅仅能通过程序实现.假定,当前工作表B列里放的是存放这些图 ...