在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
Pdf2Swf.java代码:
[java]view plaincopy
-
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函数中进行测试
[java]view plaincopy
-
<pre name="code" class="java">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]view plaincopy
-
<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>