在工作中遇到以下需求:前台显示的内容只允许客户浏览,不允许客户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:
其中'<%=request.getContextPath()%>/flexPager/FlexPaperViewer'是指用Flexpaper下的FlexPaperViewer播放器来播放。
关于Flexpaper的参数含义参看下面是我从网上找的参数含义:
-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 如果运行时间超时则退出。
示例图:
本例参数说明:
-t:源文件路径,即待转换的pdf文件路径
-f:在swf中保存全部字体
-s:转换成swf的版本,最好9版本以上
-o: 输出swf文件的路径
注意:如果在将pdf转换成swf时没有加参数-f,则在Flexpaper中使用搜索功能时,搜索结果就不能高亮显示。