在仿百度文库的方案(三)中讲述了如何把文档转换成pdf格式,在这里我们需要把pdf格式转换成swf格式的文件。如同上文转换pdf格式的文件需要转换软件这里用到的是swfTools软件。首先我们来看一下swftools的简介。
SWFTOOLS软件的简介 :
SWFTools是一种实用工具与Adobe Flash文件(SWF文件)工作的集合。 该工具集包括用于阅读的SWF文件,结合他们,和他们建立从其他内容(如图像,声音文件,视频或源代码)程序。 SWFTools是在GPL下发布的。
PDF2SWF一个PDF格式的SWF转换器。 每页生成一帧。 使您能够完全格式化的文本,包括表格,公式,在你的Flash动画图形等。 它的基础上的xpdf PDF格式Noonburg解析器从德里克二。
SWFCombine阿例如改变大小)多工具插入功能主权财富基金主权财富基金到包装,contatenating主权财富基金,主权财富基金或堆叠操作的基本参数(。
SWFStrings扫描主权财富基金的文本数据。
SWFDump打印出主权财富基金的各种信息的图像,比如载/数据字体/声音,拆卸所载代码以及交叉参考和边界框。
JPEG2SWF接受一个或多个JPEG图片,并生成一个从他们的SWF幻灯片。 支持运动估计压缩(H.263的)更好的视频序列压缩。
PNG2SWF像JPEG2SWF,只为PNG图像。
GIF2SWF转换的GIF到SWF。 还能够处理GIF动画。
WAV2SWF WAV音频文件转换成SWF文件,使用的LAME MP3编码器库。AVI2SWF AVI动画文件转换为SWF。 它支持Flash MX的H.263的压缩。 一些例子可在examples.html 。 (注意:此工具不包含在最新的版本了,因为ffmpeg或者MEncoder的工作现在做的更好)
Font2SWF转换字体文件(TTF整合,类型1)到SWF。
SWFBBox允许读出,优化和调整的SWF包围盒。
SWFC一个简单的脚本文件的工具创建的SWF文件从。 包括这两个ActionScript 2.0和ActionScript 3.0的支持。
SWFExtract允许提取影片剪辑,声音,图像等,从SWF文件。
AS3Compile一个独立的ActionScript 3.0编译器。 兼容大多使用Flex。
SWFTools支持Solaris,Linux(32和64位),FreeBSD,OpenBSD和HP - UX,Solaris和MacOS X和Windows 98/ME/2000/XP/Vista/7 等工作环境。
把pdf格式转换成swf格式只要在命令行中写入参数就好,下面是SWFTOOLS中命令行参数的值 如下:
一般能满足需求。而命令行参数可以通过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. 如果运行时间超时则退出。
SwfTools当前最新的版本为swfTools3.5,官网为http://www.swftools.com/
本文用到的版本是swftools-0.9.0.tar.zip ,下载的地址是http://download.csdn.net/download/yali1990515/4443798
在上面我们了解swfTools软件,下面我们来说一下利用swfTools把pdf转换成swf格式的算法流程。
第一步: 创建PDF2SWF转换的命令字符串。
第二步: 获取当前的RunTimes,调用第一步设置好的转换命令符,进行转换。如图:
明白了解题的思路,下面来看一下转换用到的主要代码:
package test.test1; import java.io.File; import java.io.IOException; //转换成swf格式的 public class convertPdf { /** * @param args */ private static String PDF2SWF_PATH = "C:\\Program Files\\SWFTools\\pdf2swf.exe";//swftools工具的安装路径 public void convertPDF(String inputFile, String outputFile) { File pdfFile = new File(inputFile); File swfFile = new File(outputFile); if(!inputFile.endsWith(".pdf")){ System.out.println("文件格式不是pd"); return ; } if(!pdfFile.exists()){ System.out.println("pdf文件已存在!"); return ; } if(swfFile.exists()){ System.out.println("swf文件已存在!"); return ; } //进行转换 try{ /* * languagedir=D:\\xpdf-chinese-simplified 用于处理pdf转换时出现的乱码 * 处理pdf转换的乱码需要进行三步 * 1 下载XPDF:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz 解压到 D:\xpdf-chinese-simplified 2下载字体:http://blog.pjoke.com/wp-content/uploads/2009/02/font.zip 解压到D:\xpdf-chinese-simplified\CMap\ 3 配置打开并修改xpdf-chinese-simplified目录下的add-to-xpdfrc文件。将里面的路径设为自己的路径: */ String command = PDF2SWF_PATH +" \""+inputFile+"\" -o "+swfFile+" -T 9 -s languagedir=D:\\xpdf-chinese-simplified";//-s languagedir=D:\\xpdf-chinese-simplified是用来处理转换时出现的中文乱码 System.out.println("开始转换文档: "+inputFile); Runtime.getRuntime().exec(command); System.out.println("成功转换为SWF文件!"); } catch (IOException e) { e.printStackTrace(); System.out.println("转换文档为swf文件失败!"); } } // public static void main(String[] args) { // // TODO Auto-generated method stub // convertPdf c = new convertPdf(); // String inputFile ="d:/resource/2.pdf"; // String outputFile = "d:/4.swf"; // c.convertPDF(inputFile,outputFile); // } }
注释 : 由于代码里只是进行了转换功能代码的主要书写,没有考虑路径是否正确,安装路径的问题,以及文档不存在等问题,由于只是忙着赶项目,了解的不是很全面,希望大家理解。