文件上传的同时就做好文件处理。所有的文件交由服务器处理,避免客户端安装插件,数据库设计上要提供保存两个文件的存放地址的字段,一个是供给下载原件使用,另一个供给在线预览使用。
1、使用OpenOffice将office文件转成PDF文件
2、使用SwfTools将PDF等类型文件转成swf文件
commons-cli
commons-cli
1.4
commons-io
commons-io
2.4
com.artofsolving
jodconverter
2.2.2
org.openoffice
juh
4.1.2
org.openoffice
jurt
4.1.2
org.openoffice
ridl
4.1.2
org.slf4j
slf4j-api
1.7.25
org.slf4j
slf4j-jdk14
1.7.25
test
org.openoffice
unoil
4.1.2
com.thoughtworks.xstream
xstream
1.3.1
注意jodconverter-2.2.1.jar版本不支持07版本以后的office文件,jodconverter-2.2.2.jar Maven仓库内没有,需要自己手动导入jar(将会在下面介绍如何导入)
下载之后,解压开来的项目中就有jar包,直接复制出来即可
下载地址
也可以从我CSDN里面下载全部的插件以及手动导入的jar包
下载地址
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
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;
/**
*
* FileConverter.java 1、office文件转成PFD文件 2、PDF文件转成Swf文件
*
*
* @since 2019年4月15日 上午11:13:36
* @author XinLau
* @version 1.0
*/
@SuppressWarnings("unused")
public class FileConverter {
private static final int environment = 1;// 环境 1:Windows 2:Linux
/**
* OpenOffice相关配置
*/
private static final String OpenOffice_HOME = "D:\\DevelopmentTools\\OpenOffice";
private static final String host_Str = "127.0.0.1";
private static final String port_Str = "8100";
/**
* SWFTools相关配置
*/
private static final String SWFTools_HOME = "D:/DevelopmentTools/SWFTools";
private String fileString;// (只涉及PDF2swf路径问题)
private String outputPath = "";// 输入路径 ,如果不设置就输出在默认 的位置
private String fileName;
private File pdfFile;
private File swfFile;
private File docFile;
public FileConverter(String fileString) {
ini(fileString);
System.out.println("文件路径" + fileString);
}
/**
*
* setFile 重新设置file
*
*
* @param fileString
* @return void
* @author XinLau
* @since 2019年4月15日上午11:33:46
*/
public void setFile(String fileString) {
ini(fileString);
}
/**
*
* ini 初始化
*
*
* @param fileString
* @return void
* @author XinLau
* @since 2019年4月15日上午11:34:03
*/
private void ini(String fileString) {
this.fileString = fileString;
fileName = fileString.substring(0, fileString.lastIndexOf("."));
docFile = new File(fileString);
pdfFile = new File(fileName + ".pdf");
swfFile = new File(fileName + ".swf");
}
/**
*
* office2pdf 转为PDF
*
*
* @throws Exception
* @return void
* @author XinLau
* @since 2019年4月15日上午11:34:44
*/
private void office2pdf() throws Exception {
if (docFile.exists()) {
if (!pdfFile.exists()) {
try {
// 启动OpenOffice的服务
String command = OpenOffice_HOME + "\\program\\soffice.exe -headless -accept=\"socket,host=" + host_Str
+ ",port=" + port_Str + ";urp;\"-nofirststartwizard";
System.out.println("###\n" + command);
Process pro = Runtime.getRuntime().exec(command);
// 连接openoffice服务
OpenOfficeConnection connection = new SocketOpenOfficeConnection(host_Str, Integer.parseInt(port_Str));
connection.connect();
// 转换
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
// 关闭连接和服务 close the connection
connection.disconnect();
pro.destroy();
System.out.println("****pdf转换成功,PDF输出: " + pdfFile.getPath() + "****");
} catch (java.net.ConnectException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,openoffice 服务未启动!****");
throw e;
} catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,读取转换文件 失败****");
throw e;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
} else {
System.out.println("****已经转换为pdf,不需要再进行转化 ****");
}
} else {
System.out.println("****swf转换器异常,需要转换的文档不存在, 无法转换****");
}
}
/**
*
* pdf2swf 转换成 swf,删除pdf文件
*
*
* @throws Exception
* @return void
* @author XinLau
* @since 2019年4月15日上午11:35:31
*/
private void pdf2swf() throws Exception {
Runtime r = Runtime.getRuntime();
if (!swfFile.exists()) {
if (pdfFile.exists()) {
if (environment == 1) {// windows环境处理
try {
// 注意修改 SWFTools工具的安装路径
String processArdess = SWFTools_HOME + "/pdf2swf.exe " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9";
Long fileLength = pdfFile.length();
//processArdess = processArdess + " -s poly2bitmap";
Process p = r.exec(processArdess);
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.out.print(loadStream(p.getInputStream()));
System.err.println("****swf转换成功,文件输出: " + swfFile.getPath() + "****");
if (pdfFile.exists()) {
pdfFile.delete();
}
} catch (IOException e) {
e.printStackTrace();
throw e;
}
} else if (environment == 2) {// linux环境处理
try {
Process p = r.exec("pdf2swf" + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.err.println("****swf转换成功,文件输出: " + swfFile.getPath() + "****");
if (pdfFile.exists()) {
pdfFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
} else {
System.out.println("****pdf不存在,无法转换****");
}
} else {
System.out.println("****swf已经存在不需要转换****");
}
}
/**
*
*
* pdfConverterSwf pdf文件转成swf文件,保留pdf文件
*
*
* @throws Exception
* @return void
* @author XinLau
* @since 2019年4月16日上午9:14:34
*/
public void pdfConverterSwf() throws Exception {
Runtime r = Runtime.getRuntime();
if (!swfFile.exists()) {
if (pdfFile.exists()) {
if (environment == 1) {// windows环境处理
try {
// 注意修改 SWFTools工具的安装路径
String processArdess = SWFTools_HOME + "/pdf2swf.exe " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9";
Long fileLength = pdfFile.length();
Process p = r.exec(processArdess);
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.out.print(loadStream(p.getInputStream()));
System.err.println("****swf转换成功,文件输出: " + swfFile.getPath() + "****");
/*
* if (pdfFile.exists()) { pdfFile.delete(); }
*/
} catch (IOException e) {
e.printStackTrace();
throw e;
}
} else if (environment == 2) {// linux环境处理
try {
Process p = r.exec("pdf2swf" + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9");
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.err.println("****swf转换成功,文件输出: " + swfFile.getPath() + "****");
/*
* if (pdfFile.exists()) { pdfFile.delete(); }
*/
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
} else {
System.out.println("****pdf不存在,无法转换****");
}
} else {
System.out.println("****swf已经存在不需要转换****");
}
}
static String loadStream(InputStream in) throws IOException {
int ptr = 0;
in = new BufferedInputStream(in);
StringBuffer buffer = new StringBuffer();
while ((ptr = in.read()) != -1) {
buffer.append((char) ptr);
}
return buffer.toString();
}
/**
*
* conver 转换主方法
*
*
* @return
* @return boolean
* @author XinLau
* @since 2019年4月15日上午11:36:32
*/
public boolean conver() {
if (swfFile.exists()) {
System.out.println("****swf转换器开始工作,该文件已经转换为 swf****");
return true;
}
if (environment == 1) {
System.out.println("****swf转换器开始工作,当前设置运行环境 windows****");
} else {
System.out.println("****swf转换器开始工作,当前设置运行环境 linux****");
}
try {
office2pdf();
pdf2swf();
//pdfConverterSwf();
} catch (Exception e) {
e.printStackTrace();
return false;
}
System.out.println("文件存在吗?" + swfFile);
if (swfFile.exists()) {
System.out.println("存在");
return true;
} else {
System.out.println("不存在");
return false;
}
}
/**
*
* getswfPath 返回文件路径
*
*
* @return String
* @author XinLau
* @since 2019年4月15日上午11:37:17
*/
public String getswfPath() {
if (this.swfFile.exists()) {
String tempString = swfFile.getPath();
tempString = tempString.replaceAll("\\\\", "/");
System.out.println("最后文件路径为" + tempString);
return tempString;
} else {
return "文件不存在";
}
}
/**
*
* setOutputPath 设置输出路径
*
*
* @param outputPath
* @return void
* @author XinLau
* @since 2019年4月15日上午11:37:40
*/
public void setOutputPath(String outputPath) {
this.outputPath = outputPath;
if (!outputPath.equals("")) {
String realName = fileName.substring(fileName.lastIndexOf("/"), fileName.lastIndexOf("."));
if (outputPath.charAt(outputPath.length()) == '/') {
swfFile = new File(outputPath + realName + ".swf");
} else {
swfFile = new File(outputPath + realName + ".swf");
}
}
}
public static void main(String[] args) {
String fileName = "D:\\DevelopmentTools\\apache-tomcat-7.0.86\\webapps\\property-web\\upload\\doc\\d881c0f6bfcf458fb826502177e02123.docx";
FileConverter fileConverter = new FileConverter(fileName);
try {
//fileConverter.pdf2swf();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
/*fileConverter.office2pdf();
String tempString = fileConverter.swfFile.getPath();
tempString = tempString.replaceAll("\\\\", "/");
System.out.println("最后文件路径为" + tempString);*/
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
boolean mark = fileConverter.conver();
String path = fileConverter.getswfPath();
System.out.println(path);
path = path.substring(path.lastIndexOf("/property-web"));
System.out.println(path);
}
}
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String contextPath = request.getContextPath();
String onlinePreviewLocation = request.getParameter("onlinePreviewLocation");
%>
在线文档预览