仿百度文库解决方案(四)-调用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,–helpPrintshorthelpmessageandexit打印帮助信息

-V,–versionPrintversioninfoandexit打印版本号
-o,–outputfile.swfDirectoutputtofile.swf.Iffile.swfcontains‘13568621′(file13568630.swf),theneachpage指定输出的swf文件名
-p,–pagesrangeConvertonlypagesinrangewithrangee.g.1-20
or1,4,6,9-11or
指定转换的页面范围,使用的页码描述方法与打印机打印文件时候的选页一样

-P,–passwordpasswordUsepasswordfordecipheringthepdf.指定打开pdf的密码
-v,–verboseBeverbose.Usemorethanone-vforgreatereffect.转换时输出详细的内容
-z,–zlibUseFlash6(MX)zlibcompression.使用Flash6的zlib压缩机制
-i,–ignoreAllowspdf2swftochangethedraworderofthepdf.Thismaymakethegenerated允许程序修改pdf的绘制顺序,可能会导致结果与原来有差异
-j,–jpegqualityqualitySetqualityofembeddedjpegpicturestoquality.0isworst(small),100isbest(big).(default:85)设置转换其中的jpeg图片的质量,从0到100,默认值是85。
-s,–setparam=valueSetaSWFencoderspecificparameter.Seepdf2swf-shelpformoreinformation.设置SWF转码时候的参数,具体参数可以用pdf2swf-shelp获取
-w,–samewindowWhenconvertingpdfhyperlinks,don’tmakethelinksopenanewwindow.设置转换后的swf打开原pdf中的连接时使用相同的窗口
-t,–stopInsertastop()commandineachpage.在每页结尾添加一个stop()命令
-T,–flashversionnumSetFlashVersionintheSWFheadertonum.设置SWF所使用的flash版本号
-F,–fontdirdirectoryAdddirectorytothefontsearchpath.指定字体文件所在路径
-b,–defaultviewerLinkastandardviewertotheswffile.指定默认的swf导航文件,用来翻页、放大缩小等等
-l,–defaultloaderLinkastandardpreloadertotheswffilewhichwillbedisplayedwhilethemainswfisloading.指定默认的swf加载文件,用来显示加载进程效果
-B,–viewerfilenameLinkviewerfilenametotheswffile.指定swf导航文件,作用同-b
-L,–preloaderfilenameLinkpreloaderfilenametotheswffile.指定swf加载文件,作用同-l
-q,–quietSuppressnormalmessages.Use-qqtosuppresswarnings,also.不打印普通信息,用-qq就不打印警告信息。
-S,–shapesDon’tuseSWFFonts,butstoreeverythingasshape.不使用字体,所有都转为形
-f,–fontsStorefullfontsinSWF.(Don’treducetousedcharacters).在swf中保存全部字体。
-G,–flattenRemoveasmanycliplayersfromfileaspossible.在文件中尽量去除影片层,合并它们
-I,–infoDon’tdoactualconversion,justdisplayalistofallpagesinthePDF.不做实际转换,仅显示PDF的信息。
-Q,–maxtimenAbortconversionafternseconds.OnlyavailableonUnix.如果运行时间超时则退出。

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);
//	}

}


注释 : 由于代码里只是进行了转换功能代码的主要书写,没有考虑路径是否正确,安装路径的问题,以及文档不存在等问题,由于只是忙着赶项目,了解的不是很全面,希望大家理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值