仿百度文库解决方案(四)-调用swfTools把pdf格式文件转换成swf
????????????? 在仿百度文库的方案(三)中讲述了如何把文档转换成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?打印版本号 ???? -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 FilesSWFToolspdf2swf.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-simplifiedCMap 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); // } } ? 注释? : 由于代码里只是进行了转换功能代码的主要书写,没有考虑路径是否正确,安装路径的问题,以及文档不存在等问题,由于只是忙着赶项目,了解的不是很全面,希望大家理解。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |