使用javaweb实现在线预览的工具类:
功能:office转化为pdf,pdf转化为swf
package cn;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
* office转化为pdf
* pdf转化为swf文件
* @author Administrator
*
*/
public class Converter {
private static String pdftoswf = "E:\\安装软件\\swftools\\pdf2swf.exe"; //swftools软件的安装路径
private static String openOfficePath = "E:\\安装软件\\openoffice\\date"; //openoffice软件的安装路径
/**
* 将pdf转化为swf文件
* 使用步骤:
* 1.下载swftools-0.9.exe软件并安装
* 直接即可调用方法
* @param sourcePath pdf原路径
* @param destPath 目的路径
* @param fileName 生成swf的文件名
*/
public static int convertPDF2SWF(String sourcePath, String destPath, String fileName) throws Exception {
//目标路径不存在则建立目标路径
File dest = new File(destPath);
if (!dest.exists()) dest.mkdirs();
//源文件不存在则返回
File source = new File(sourcePath);
if (!source.exists()) return 0;
//调用pdf2swf命令进行转换
String command = pdftoswf + " -o \"" + destPath + "\\" + fileName + "\" -s flashversion=9 \"" + sourcePath + "\"";
Process pro = Runtime.getRuntime().exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while (bufferedReader.readLine() != null);
try {
pro.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pro.exitValue();
}
/**
* 将Office文档转换为PDF. 运行该函数需要用到OpenOffice和jodconverter-2.2.2
* 使用步骤:
* 1.下载OpenOffice软件和jodconverter-2.2.2
* 2.安装OpenOffice软件
* 3.将jodconverter-2.2.2压缩包解压,将lib目录下的包全部加入路径
* 即可直接调用方法
*
* <pre>
* 方法示例:
* String sourcePath = "F:\\office\\source.doc";
* String destFile = "F:\\pdf\\dest.pdf";
* Converter.office2PDF(sourcePath, destFile);
* </pre>
*
* @param sourceFile
* 源文件, 绝对路径. 可以是Office2003-2007全部格式的文档, Office2010的没测试. 包括.doc,
* .docx, .xls, .xlsx, .ppt, .pptx等. 示例: F:\\office\\source.doc
* @param destFile
* 目标文件. 绝对路径. 示例: F:\\pdf\\dest.pdf
* @return 操作成功与否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置错误; 如果返回 0,
* 则表示操作成功; 返回1, 则表示转换失败
*/
public static int office2PDF(String sourceFile, String destFile) {
try {
File inputFile = new File(sourceFile);
if (!inputFile.exists()) {
return -1;// 找不到源文件, 则返回-1
}
// 如果目标路径不存在, 则新建该路径
File outputFile = new File(destFile);
if (!outputFile.getParentFile().exists()) {
outputFile.getParentFile().mkdirs();
}
String OpenOffice_HOME = openOfficePath;//这里是OpenOffice的安装目录
// 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\'
if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
OpenOffice_HOME += "\\";
}
// 启动OpenOffice的服务
String command = OpenOffice_HOME
+ "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
Process pro = Runtime.getRuntime().exec(command);
// connect to an OpenOffice.org instance running on port 8100
OpenOfficeConnection connection = new SocketOpenOfficeConnection(
"127.0.0.1", 8100);
connection.connect();
// convert
DocumentConverter converter = new OpenOfficeDocumentConverter(
connection);
converter.convert(inputFile, outputFile);
// close the connection
connection.disconnect();
// 关闭OpenOffice服务的进程
pro.destroy();
return 0;
} catch (FileNotFoundException e) {
e.printStackTrace();
return -1;
} catch (IOException e) {
e.printStackTrace();
}
return 1;
}
/**
* 将预览的文件转化为swf文件
* @param realPath 项目路径 String realPath = request.getRealPath("/");
* @param fileName 预览的文件名 例如 abc.doc
* @return String 返回swf文件的文件名
*/
public static String onlineView(String realPath,String fileName){
String sourcePath = null; //源文件路径
String destPath = null; //生成文件路径
String pdfFileName = null; //office文件转化为pdf文件时的文件名
String swfFileName = null; //pdf文件转化为swf文件时的文件名
int typeFlag = -1; //文件类型标记 0表示为office文件,1表示pdf文件
int start = fileName.lastIndexOf(".");
String firstFileName = fileName.substring(0,start);
String lastFileName = fileName.substring(start+1);
/*判断文件类*/
if ("pdf".equalsIgnoreCase(lastFileName)) {
typeFlag = 1;
destPath = realPath+"upload/"+fileName;
}else {
/**
* Office文件处理
* 1.转化为pdf
* 2.转化为swf
*/
typeFlag = 0;
/*转化为pdf文件 start*/
pdfFileName = firstFileName+".pdf";
sourcePath = realPath+"upload/"+fileName;
destPath = realPath+"tem/"+ pdfFileName;
int flag = Converter.office2PDF(sourcePath, destPath);
if (flag == 1) {
System.out.println("转化失败");
return null;
}else if(flag == 0){
System.out.println("转化成功");
}else {
System.out.println("找不到源文件, 或url.properties配置错误");
return null;
}
/*转化pdf文件 end*/
}
/* 将pdf转化为swf文件 start */
sourcePath = destPath;
destPath = realPath+"swf/";
swfFileName = firstFileName+".swf";
try {
Converter.convertPDF2SWF(sourcePath, destPath, swfFileName);
} catch (Exception e) {
e.printStackTrace();
}
if (typeFlag == 0) { //若预览的为office文件,删除生成的pdf临时文件
sourcePath = realPath+"tem/"+ pdfFileName;
File file = new File(sourcePath);
file.delete();
}
/* 将pdf转化为swf文件 end */
return swfFileName;
}
public static void main(String []args) throws Exception {
/*测试pdf转化为swf文件*/
/*
String sourcePath = "C:\\Users\\Administrator\\Desktop\\1\\1.pdf";
String destPath = "C:\\Users\\Administrator\\Desktop\\1\\";
String fileName = "test.swf";
Converter.convertPDF2SWF(sourcePath, destPath, fileName);
*/
/*测试office转化为pdf文件*/
/*
String sourcePath = "C:\\Users\\Administrator\\Desktop\\1\\分组情况一览表.xls";
String destFile = "C:\\Users\\Administrator\\Desktop\\1\\dest.pdf";
int flag = Converter.office2PDF(sourcePath, destFile);
if (flag == 1) {
System.out.println("转化失败");
}else if(flag == 0){
System.out.println("转化成功");
}else {
System.out.println("找不到源文件, 或url.properties配置错误");
}
*/
}
}
网站上传和在线预览实现步骤:
一.将office文件或pdf文件上传到upload目录
二.在线预览文件:
1.选择要在线预览的文件
2.若上传为pdf文件转化为swf文件,在实现在线预览
若为office文件,先转化为pdf文件,在转为swf文件,最后在线预览。
3.在线预览后将swf文件保存,下次直接调用
或者
删除swf文件,下次再通过上述步骤调用
实现具体步骤:(个人版)
1.安装OpenOffice软件,并且将jodconverter的lib包下的包加入项目中
2.安装swftools软件
3.将flexpaper相关文件加入项目
4.Converter.java导入项目
后台调用代码:
String realPath = request.getRealPath("/"); //项目的路径
String fileName = "22.doc"; //预览的文件名
fileName = Converter.onlineView(realPath,fileName); //返回生成的swf的文件名
request.setAttribute("swfname", "swf/"+fileName); //将文件名传到前台
request.getRequestDispatcher("/success.jsp").forward(request, response);//跳转
注意:
1.修改相应的参数,如:软件安装路径,文件包路径
2.根据需求修改文件的命名规则
总结:
需要技术:
openoffice和jodconverter-2.2.2:office文件转化为pdf (安装OpenOffice软件,将jodconverter的lib文件夹中的包加入项目)
swftools:pdf文件转化为swf文件 (安装swftools软件)
FlexPaper :swf文件的在线播放 (解压加入项目)