java实现office文件的在线预览
要实现office文件的在线预览,需要将office文件转换为pdf文件,然后打开
- 首先需要安装openOfice
- 去官网先将openOffice 下载下来Apache OpenOffice - Official Download
- 在java中导入依赖,导入依赖可能会导致报错,是因为本地maven仓库没有此依赖
- 所以需要去下载jar包,将jar放入本地maven资源仓库,在这里我提供了所需的jar包,有需要的可以去下载
- 链接:https://pan.baidu.com/s/1gRlN6KHlL3nMz5fB7l-EIQ 提取码:zxcv
- 下载号好之解压到Maven仓库的"com\artofsolving\"这个路径下( 如果没有这个路径就创建 )
完成上面这步操作之后就可以配置Maven依赖了
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>jurt</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>ridl</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>3.0.1</version>
</dependency>
我将openoffice 的转换写成了一个工具类放在下面,有需要可以直接使用
/**
* Created with IntelliJ IDEA.
*
* @Auther: 李子叔叔
* @Date: 2021/01/20/18:39
* @Description:
*/
public class OppenOffice {
// 将word格式的文件转换为pdf格式
//startFile为源文件地址
//overFile为转换之后的文件地址
public static boolean WordToPDF(String startFile, String overFile) throws IOException {
// 源文件目录
File inputFile = new File(startFile);
System.out.println(startFile);
//
File outFile = new File(overFile);
if (!inputFile.exists()) {
System.out.println("源文件不存在!");
return false;
}
// 输出文件目录
File outputFile = new File(overFile);
if (!outputFile.getParentFile().exists()) {
outputFile.getParentFile().exists();
}
// 调用openoffice服务线程
/** 我把openOffice下载到了 C:/Program Files (x86)/下 ,下面的写法自己修改编辑就可以**/
String command = "C:\\Program Files (x86)\\OpenOffice 4\\program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
Process p = Runtime.getRuntime().exec(command);
// 连接openoffice服务
OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
connection.connect();
// 转换
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(inputFile, outputFile);
// 关闭连接
connection.disconnect();
// 关闭进程
p.destroy();
return true;
}
}
写完工具类之后在控制层拿到两个地址就可以直接调用工具类进行转换,在控制器用流的方式打开也行,也可以将转换完成之后的地址返回到前台
使用流打开
//overoFile为转换之后的路径
File file = new File(overFile);
//判断文件是否存在
if (file.exists()){
byte[] data = null;
try {
FileInputStream input = new FileInputStream(file);
data = new byte[input.available()];
input.read(data);
response.getOutputStream().write(data);
input.close();
} catch (Exception e) {
System.out.println(e);
}
}else{
return;
}
//js
function openFile(fileId) {
window.open("/openOffice?fileId="+fileId);
}
在前端直接打开
function openFile(fileId) {
$.ajax({
url:"/openOffice?fileId="+fileId,//控制器路径
type:"get",
async: false,
success:function (data) {
$.modal.open("预览文件",data);
}
})
}