pdf转swf的Java实现,可用于实现类似百度文库的效果

在Java Web开发中,我们往往会遇到将pdf或word文档上传并显示在页面上用于供用户的查看,类似于百度文库或豆丁网的形式,
那么这种需求要如何实现呢?
经过一个下午的摸索与试验,终于小有成果。下面分享一下我的思路。
我们要做的是将pdf转换成swf并在网页上显示,那么我们需要的工具:SWFTools 下载地址:http://www.swftools.org/download.html
下载后进行安装,安装完成后,为了方便使用,我们也可以将此安装路径设置成环境变量,在安装目录下可以看到很多可执行文件(.exe):


这些可执行文件提供了多种格式转换成swf的功能,我们所需要的就是pdf2swf.exe这个文件


下面点击开始->运行.输入cmd进入dos终端,我们先试一下pdf2swf.exe是否可以正常使用
命令格式为: pdf2swf [-options] 源文件.pdf -o 目的文件.swf

执行过后,我们会在指定地方发现转换成的swf文件,将此文件在网页上显示时,会发现只有光秃秃的flash,接下来我们要做的是给它加上一个
播放器,看上去更专业一些
在SWFTools的安装路径下(D:\Program Files\SWFTools)有一个rfxview.swf文件,将此文件与转换成的文件进行合并。
命令格式为: swfcombine rfxview.swf viewport=f:\test.swf -o f:\test.swf



在此理论工作就完成了。下面介绍如何用Java来实现,思路就是用Java执行cmd命令

Pdf2Swf.java代码:


package com.maze.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;


public class Pdf2Swf {
	
	//SWFTools的环境安装路径
	public static String SWFTOOLS_PATH="D:"+File.separator+"Program Files"+File.separator+"SWFTools"+File.separator;
	//播放器样式文件rfxview.swf的路径
	public static String RFXVIEW_SWF_PATH="f:"+File.separator+"rfxview.swf";
	
	public static int convertPDF2SWF(String sourcePath, String destPath, String fileName) throws IOException{


		File dest = new File(destPath);     
        if (!dest.exists()) {     
            dest.mkdirs();     
        }     
    
        // 源文件不存在则返回     
        File source = new File(sourcePath);     
        if (!source.exists()) {     
            return -1;     
        }     
        
        String[] envp = new String[1];     
        envp[0] = "PATH="+SWFTOOLS_PATH;     
        String command = "cmd /c \""+SWFTOOLS_PATH+"pdf2swf\" -z -s flashversion=9 " + sourcePath + " -o " + destPath + fileName ;     
        Process pro = Runtime.getRuntime().exec(command, envp);     
          
        BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(pro.getInputStream()));     
        while (bufferedReader.readLine() != null) {     
        }     
        try {     
            pro.waitFor();     
        } catch (InterruptedException e) {     
            e.printStackTrace();     
        }     
        // 然后在套播放器     
        command = "cmd /c \""+SWFTOOLS_PATH+"swfcombine\" "+RFXVIEW_SWF_PATH+" viewport=" + destPath + fileName + " -o " + destPath +fileName;     
        pro = Runtime.getRuntime().exec(command, envp);     
        bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream()));     
        while (bufferedReader.readLine() != null) {     
        }     
        try {     
            pro.waitFor();     
        } catch (InterruptedException e) {     
            e.printStackTrace();     
        }     
        return pro.exitValue();
	}
}




下面在main函数中进行测试
package com.maze.main;
import java.io.IOException;
import com.maze.util.Pdf2Swf;
public class Test {

	public static void main(String[] args) throws IOException {
		String sourcePath = "f:\\test.pdf";     
        	String destPath = "f:\\";     
        	String fileName = "test.swf";     
       		Pdf2Swf.convertPDF2SWF(sourcePath,destPath, fileName);
	}

}



执行过后生成的swf文件在页面的显示效果:HTML代码:
<html>
	<head>
		<title>test</title>
	</head>
	<body>
		<center>
			<embed type="application/x-shockwave-flash" src="test.swf" height="800" width="900" >
			</embed>
		</center>
	</body>
</html>

贴图




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值