SWF文字查询及高亮显示——第二步:实现文字查询高亮显示基本思路篇

it2024-11-09  12

前提:我使用PDF2SWF工具(http://www.swftools.org/)将PDF文档预先转成SWF(优点:1.安全性容易控制,不允许随便下载复制 2浏览方便,不要Adobe插件,客户端普遍装有Flash插件),需要在SWF中实现关键字查询和高亮显示。

 

基本思路:使用包flash.text中TextSnapshot类,TextSnapshot 对象可用于处理影片剪辑中的静态文本。用到方法:

findText(beginIndex:int, textToFind:String, caseSensitive:Boolean):int 搜索指定的 TextSnapshot 对象,并返回在 beginIndex 位置或其后找到的 textToFind 的第一个匹配项的位置。 setSelected(beginIndex:int, endIndex:int, select:Boolean):void 指定 TextSnapshot 对象中要选择或取消选择的字符范围。 setSelectColor(hexColor:uint = 0xFFFF00):void 指定当突出显示使用 setSelected() 方法选择的字符时要使用的颜色。   基本步骤:(转载自:How do I highlight text in the SWF?  http://wiki.swftools.org/index.php/How_do_I_highlight_text_in_the_SWF%3F)

Firstly, you must ensure that fonts are embedded within your SWF. To do this, the "-f" and "-F" switches are necessary:

pdf2swf -F $YOUR_FONTS_DIR$ -f input.pdf -o output.swf

This will produce a file where all available fonts from your fonts folder are embedded into the SWF.

Next, you'll need to write up some code to do the search itself. Here is a sample:

private var snapText:TextSnapshot; private function doSearch(event:Event):void { if (snapText == null) snapText = activeDoc.textSnapshot; if (searchTI.text != '' && searchTI.text.length > 1) { var textPos:int = snapText.findText(0, searchTI.text, false); snapText.setSelected( 0, snapText.charCount, false ); if (textPos > 0) { do { snapText.setSelectColor( 0xFFEF00 ); snapText.setSelected( textPos, textPos + searchTI.text.length, true ); textPos = snapText.findText(textPos + searchTI.text.length, searchTI.text, false); } while (textPos > 0) } else { Alert.show( "Not found.", "Information" ); } } else { snapText.setSelected( 0, snapText.charCount, false ); } } 注: $YOUR_FONTS_DIR$ :为存放PDF文件中用到的字体文件的文件夹,我直接用 C:\WINDOWS\Fonts,当然这是我试验阶段用的,应该真的PDF文档中可能用到的字体就行,Windows自带的字体太多了,会使PDF2SWF转换速度慢,转换出的SWF文件变大。使用时建议只用PDF文档中用到的几个字体文件!

 activeDoc 为你加载进去的PDF的SWF后转为MovieClip对象。

转载于:https://www.cnblogs.com/wuhenke/archive/2009/11/16/1603776.html

相关资源:JAVA上百实例源码以及开源项目源代码
最新回复(0)