在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代码:
下面在main函数中进行测试
那么这种需求要如何实现呢?
经过一个下午的摸索与试验,终于小有成果。下面分享一下我的思路。
我们要做的是将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>
贴图