思路:浏览器无法直接打开word,excel,ppt等文件,思路是通过openOffice先把文件转成pdf保存在服务器上,再通过浏览器直接打开pdf从而实现预览功能。
OpenOffice
OpenOffice.org 是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。它与各个主要的办公室软件套件兼容。OpenOffice.org 是自由软件,任何人都可以免费下载、使用、及推广它。
下载地址
JodConverter
jodconverter-2.2.2.zip 下载地址:
http://sourceforge.net/projects/jodconverter/files/JODConverter/
下载openOffce软件,安装相应系统版本,这里以windows为例
所需jar包:
image.png
或者maven地址下载
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.artofsolving.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>3.0-beta-4-jahia2</version>
</dependency>
上面的第二个jar包可能有些资源库没有,可以先去maven官网下载下来之后安装到本地maven库就行了。
新建实体类PDFDemo
import java.io.File;
import java.net.ConnectException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
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.StreamOpenOfficeDocumentConverter;
public class PDFDemo {
public static boolean officeToPDF(String sourceFile, String destFile) {
try {
File inputFile = new File(sourceFile);
if (!inputFile.exists()) {
// 找不到源文件, 则返回false
return false;
}
// 如果目标路径不存在, 则新建该路径
File outputFile = new File(destFile);
if (!outputFile.getParentFile().exists()) {
outputFile.getParentFile().mkdirs();
}
//如果目标文件存在,则删除
if (outputFile.exists()) {
outputFile.delete();
}
// DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
// OpenOffice安装在本地环境的目录
String officeHome = "D:\\profiles\\openOfice4";
config.setOfficeHome(officeHome);
config.setPortNumber(8100);
config.setTaskExecutionTimeout(1000 * 60 * 5);// 设置任务执行超时为5分钟
config.setTaskQueueTimeout(1000 * 60 * 60 * 24);// 设置任务队列超时为24小时
OfficeManager officeManager = config.buildOfficeManager();
officeManager.start();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
if (inputFile.exists()) {
// 进行PDF格式的转换
converter.convert(inputFile, outputFile);
}
officeManager.stop();
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
boolean flag = officeToPDF("D:\\testE.xls", "D:\\test3.pdf");
System.out.println(flag);
}
}
上面officceToPDF方法的第一个参数是原文件路径,第二个参数是输出文件路径,后缀名改成html就转成html,后缀名是pdf就转成pdf
上面的方法比较浪费性能 每次都要打开关闭,可以在服务器端开启soffice服务的方式直接调用连接会比较可行;
去到安装目录的program文件夹 cmd打开,运行
soffice -headless -accept="socket,host=127.0.0.1,
port=8100;urp;"-nofirststartwizard
D:\profiles\openOfice4\program>soffice -headless -accept="socket,host=127.0.0.1,
port=8100;urp;"-nofirststartwizard
image.png
image.png
可以上图看到进程已开启
以下代码可调用
public static boolean officeToPDF(String sourceFilePath, String destFilePath) {
boolean flag = false;
//try {
File inputFile = new File(sourceFilePath);
if (!inputFile.exists()) {
// 找不到源文件, 则返回false
return flag;
}
// 如果目标路径不存在, 则新建该路径
File outputFile = new File(destFilePath);
if (!outputFile.getParentFile().exists()) {
outputFile.getParentFile().mkdirs();
}
// 如果目标文件存在,则删除
if (outputFile.exists()) {
outputFile.delete();
}
// DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
if (inputFile.exists()) {
// 进行PDF格式的转换
converter.convert(inputFile, outputFile);
}
connection.disconnect();
flag = true;
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
return flag;
}
网友评论