使用Flexpaper实现仿百度文库的效果

时间:2023-02-08 20:03:01

在工作中遇到以下需求:前台显示的内容只允许客户浏览,不允许客户copy和下载。解决方案:使用Flexpaper实现仿百度文库的效果。

需要的工具:1、PDF转换工具SWFTools;2、FlexPaper;

我们使用SWFTools的pdf2swf.exe将pdf转换为swf:

StringBuffer command = new StringBuffer();
String destPath= destPath.substring(0, destPath.lastIndexOf("\\"));//swf路径
command.append("....\pdf2swf.exe");
command.append(" -t "); command.append(" -f ");
command.append(sourcePath);//pdf路径
command.append(" -s flashversion=9 -o "); command.append(destPath); command.append(fileName);//swf文件名字
Process pro = Runtime.getRuntime().exec(command.toString()); System.out.println("生成SWF文件开始..."); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream())); while (bufferedReader.readLine() != null);   try { pro.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("生成SWF文件结束..."); pro.destroy();

 用Flexpaper播放转换成的swf:

<script type="text/javascript"> 
                var url = "<%=request.getContextPath()%>/swf/${swfName}.swf";
                var fp = new FlexPaperViewer(    
                         '<%=request.getContextPath()%>/flexPager/FlexPaperViewer',
                         'viewerPlaceHolder', { config : {
                         SwfFile : escape(url),
                         Scale : 0.2, 
                         ZoomTransition : 'easeOut',
                         ZoomTime : 0.2,
                         ZoomInterval : 0.2,
                         FitPageOnLoad : true,
                         FitWidthOnLoad : true,
                         FullScreenAsMaxWindow : false,
                         ProgressiveLoading : false,
                         MinZoomSize : 0.4,
                         MaxZoomSize : 3,
                         SearchMatchAll : false,
                         InitViewMode : 'Portrait',
                         PrintPaperAsBitmap : false,
                         
                         ViewModeToolsVisible : true,
                         ZoomToolsVisible : true,
                         NavToolsVisible : true,
                         CursorToolsVisible : true,
                         SearchToolsVisible : true,
                           localeChain: 'zh_CN'
                         }});
            </script>

其中'<%=request.getContextPath()%>/flexPager/FlexPaperViewer'是指用Flexpaper下的FlexPaperViewer播放器来播放。
关于Flexpaper的参数含义参看http://ajava.org/article-685-1.html

下面是我从网上找的参数含义:

-h , –help                   打印帮助信息
-V , –version                打印版本号
-o , –output file.swf        指定输出的swf文件名
-p , pages range             指定转换的页面范围1-20 或者1,4,6,9-11,使用的页码描述方法与打印机打印文件时候的选页一样
-P , –password password      指定打开pdf的密码
-v , –verbose                转换时输出详细的内容
-z , –zlib                   使用Flash 6的zlib压缩机制
-i , –ignore                 允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
-j , –jpegquality quality    设置转换其中的jpeg图片的质量,从0到100,默认值是85。
-s , –set param=value        设置SWF转码时候的参数,具体参数可以用pdf2swf -s help获取
-w , –samewindow             设置转换后的swf打开原pdf中的连接时使用相同的窗口
-t , –stop                   在每页结尾添加一个stop()命令
-T , –flashversion num       设置SWF所使用的flash版本号
-F , –fontdir directory      指定字体文件所在路径
-b , –defaultviewer          指定默认的swf导航文件,用来翻页、放大缩小等等
-l , –defaultloader          指定默认的swf加载文件,用来显示加载进程效果
-B , –viewer filename        指定swf导航文件,作用同-b
-L , –preloader filename     指定swf加载文件,作用同-l
-q , –quiet                  不打印普通信息,用-qq就不打印警告信息。
-S , –shapes                 不使用字体,所有都转为形状。
-f , –fonts                  在swf中保存全部字体。
-G , –flatten                在文件中尽量去除影片层,合并它们
-I , –info                   不做实际转换,仅显示PDF的信息。
-Q , –maxtime n              如果运行时间超时则退出。

示例图:

使用Flexpaper实现仿百度文库的效果

 

本例参数说明:

-t:源文件路径,即待转换的pdf文件路径

-f:在swf中保存全部字体

-s:转换成swf的版本,最好9版本以上

-o: 输出swf文件的路径

注意:如果在将pdf转换成swf时没有加参数-f,则在Flexpaper中使用搜索功能时,搜索结果就不能高亮显示。