Java使用SWFTools转换PDF为SWF

    上一篇文章说道,我的一个Android项目里需要查看word和pdf文档,由于在移动终端转换格式比较费劲,所以我选择在服务器端转换。针对word我选择转换为html,在上一篇文章中已经说得很清楚了,那么这一篇文章我将讲述一下将pdf转换为swf的过程。

 

    为什么要转换成swf呢?其实最开始我想过把pdf转换为html,我用的是xpdf和pdftohtml,虽然转换成功了,但是效果很不理想,先不说有些图片被漏掉了,就算是转换成功的图片和文字的位置和格式都乱七八糟。。而且,有一种pdf,不知道为什么,虽然没有加密,文字和图片也都能复制,但是复制出来的图片是黑乎乎的,就像损坏了似的,综上所述,pdf转html效果不好(不知道为啥好多外国人都评价说:Nice work! thanks之类的...)。

 

    于是我想到将pdf先转为word,再用上一篇的方法转为html,想法挺好,但是我查阅资料只发现了在线pdf转word和一些pdftoword的小软件,无法用到程序中哎。不过我在查找过程中发现Adobe公司除了pdf reader这款免费的pdf阅读软件之外,还有一种收费的阅读软件——Adobe Acrobat。这个软件功能很强大,可以直接把word等office文件转为pdf,更加能够将pdf转为word、excel等office文档,当然,pdf转html也不在话下!可惜的是,我只找到了利用Acrobat API将office文档转为pdf的方法,也许是Acrobat 并没有免费开放pdf转其他格式的接口吧,也许是我没找到,如果哪位朋友找到了,一定告诉我啊!

 

   接下来我又想到了pdf阅读器的实现,我发现好多pdf阅读器都是图片,每一页都是一整张图片,在网上我也发现了很多pdf转为Image的方法,但是每个人都有自己的说法,有的说这种方法好,有的说那种方法好= =,这里有个朋友实现了几乎大部分的pdf转Image方法,并且对各个方法的优缺点进行了对比,地址链接:http://www.cnblogs.com/lqminn/archive/2012/12/11/2813832.html,于是我觉得可能pdf转为图片一直没有一个完善的方法,也许某些方法可以实现,但是说不定哪一次哪一种pdf就会出现乱码,丢失等问题。(当然,如果你能保证你的pdf文档不会很特别,一定不会出现意外问题,选择其中一种方法也是不错的)

 

    于是我最终决定将pdf转为swf,这是因为权衡了以上利弊之后所得出的结果,而且pdf转swf的技术已经很完善了,网上有很多人用到仿百度文库需求的都用到了这个方法,所用工具是SWFTools。下面我将介绍一下pdf转swf的具体过程:

 

    说是用SWFTools,其实只用其中的pdf2swf,PDF2SWF一个PDF格式的SWF转换器。 每页生成一帧。 使您能够完全格式化的文本,包括表格,公式,在你的Flash动画图形等。 它的基础上的xpdf PDF格式Noonburg解析器从德里克二。”

 

    1.到官网下载SWFTools,据说目前最稳定版本是0.9.1,但是我下的是Development Snapshots的。地址链接:http://www.swftools.org/download.html

    2.安装SWFTools.exe,比如我安装到了D:\SWFTools中。

    3.在安装目录中新建一个批处理文件,pdf2swf.bat(先新建个txt,在里面编写好批处理命令再另存为pdf2swf.bat)。

 

pdf2swf.bat内容:

@echo off  
set pdf2swfPath=%1  
set inputPath=%2 
set outputPath=%3 
cd /d %pdf2swfPath%  
pdf2swf -t -B rfxview.swf %inputPath% -o %outputPath%
exit

Java代码:

public class SwftoolsUtil {
	// 要转换的pdf文件路径
	private static String INPUT_PATH;
	// 转换后的swf文件路径
	private static String OUTPUT_PATH;
	// pdf2swf.exe的路径
	private static String PDF2SWF_PATH = "D:\\SWFTools";
	
	public static void main(String[] args) {
		SwftoolsUtil.pdfToSwf("C:\\Users\\無名\\Desktop\\PAD.pdf", "C:\\Users\\無名\\Desktop\\PAD.swf");
	}
	/**  
     * PDF转SWF
     * @param pdffile PDF文件全路径  
     * @param swffile 转换后SWF文件存放路径  
     */
	public static void pdfToSwf(String pdffile, String swffile)
	{
		INPUT_PATH = pdffile;
		OUTPUT_PATH = swffile;
		if(checkContentType()==0)
		{
			toSwf();
		}
	}
	/**  
     * 检查文件是否是pdf类型的  
     * @return  
     */ 
	private static int checkContentType()
	{
		String type = INPUT_PATH.substring(INPUT_PATH.lastIndexOf(".") + 1, INPUT_PATH.length())
				.toLowerCase();
		if (type.equals("pdf")){   
            System.out.println("*****是pdf文件*****");   
            return 0;   
		} 
		else{
			System.out.println("*****非pdf文件*****"); 
			return 9;
		}		
	}
	/**  
     * 调用批处理文件生成swf文件  
     */ 
	private static void toSwf() {  
		if(new File(INPUT_PATH).isFile()){
			System.out.println("*****正在转换..*****");
			try {    
				// 调用创建的bat文件进行转换 
				String cmd = "cmd /c start D:\\SWFTools\\pdf2swf.bat \"" 
						+ PDF2SWF_PATH + "\" \"" + INPUT_PATH + "\" \"" + OUTPUT_PATH + "\"";
				System.out.println("cmd: " + cmd);
				Runtime.getRuntime().exec(cmd);
 
		        System.out.println("*****转换成功*******");
		    } 
		    catch (Exception e) {  
		        e.printStackTrace();  
		        System.out.println("*****转换失败*******");
		    }  
		}
		else{
			System.out.println("*****文件不存在*****");
		}
	}  

}

    Ps:如果有朋友也是要在Android端显示pdf的话,webview是可以加载html和swf的,但是Adobe公司据说将不再支持Android上的flash插件了。所以说,如果你的手机是Android2.X版本,那么应该会在买的时候就预装了flash插件,如果是像我这样的pad系统是Android4.0,那么他不会预装flash插件,需要自己手动安装,这里给出flash player for Android4.X的地址链接:http://as.baidu.com/a/item?docid=2846825&f=web_alad_6 

    OK,到此为止,Pdf转Swf的工具类就实现了。希望对大家有所帮助,也希望大家能够多多支持和鼓励我这个咋哇&安卓菜鸟大笑

转载于:https://www.cnblogs.com/coderookie0820/archive/2013/04/12/4367514.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值