項(xiàng)目中要實(shí)現(xiàn)WORD的文件預(yù)覽功能脆贵,我們可以通過(guò)將WORD轉(zhuǎn)換成PDF或者HTML,然后通過(guò)瀏覽器預(yù)覽起暮。
OpenOffice
OpenOffice.org 是一套跨平臺(tái)的辦公室軟件套件卖氨,能在 Windows、Linux鞋怀、MacOS X (X11)双泪、和 Solaris 等操作系統(tǒng)上執(zhí)行持搜。它與各個(gè)主要的辦公室軟件套件兼容密似。OpenOffice.org 是自由軟件,任何人都可以免費(fèi)下載葫盼、使用残腌、及推廣它。
下載地址
JodConverter
jodconverter-2.2.2.zip 下載地址:
http://sourceforge.net/projects/jodconverter/files/JODConverter/
Word轉(zhuǎn)換
啟動(dòng)OpenOffice的服務(wù)
進(jìn)入openoffice安裝目錄,通過(guò)cmd啟動(dòng)一個(gè)soffice服務(wù)抛猫,啟動(dòng)的命令是soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"
如果覺得后臺(tái)運(yùn)行OpenOffice服務(wù)比較麻煩蟆盹,可以通過(guò)運(yùn)行代碼
public class PDFDemo {
public static boolean officeToPDF(String sourceFile, String destFile) {
try {
File inputFile = new File(sourceFile);
if (!inputFile.exists()) {
// 找不到源文件, 則返回false
return false;
}
// 如果目標(biāo)路徑不存在, 則新建該路徑
File outputFile = new File(destFile);
if (!outputFile.getParentFile().exists()) {
outputFile.getParentFile().mkdirs();
}
//如果目標(biāo)文件存在,則刪除
if (outputFile.exists()) {
outputFile.delete();
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
connection.connect();
//用于測(cè)試openOffice連接時(shí)間
System.out.println("連接時(shí)間:" + df.format(new Date()));
DocumentConverter converter = new StreamOpenOfficeDocumentConverter(
connection);
converter.convert(inputFile, outputFile);
//測(cè)試word轉(zhuǎn)PDF的轉(zhuǎn)換時(shí)間
System.out.println("轉(zhuǎn)換時(shí)間:" + df.format(new Date()));
connection.disconnect();
return true;
} catch (ConnectException e) {
e.printStackTrace();
System.err.println("openOffice連接失敼虢稹逾滥!請(qǐng)檢查IP,端口");
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
officeToPDF("E:\\test.docx", "E:\\test.pdf");
}
}
Word、ppt轉(zhuǎn)Html
只需要將后綴名從.pdf
改為.html
即可败匹。
public static void main(String[] args) {
officeToPDF("E:\\test.docx", "E:\\test.html");
}
Maven配置
Maven依賴
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</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>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.4.3</version>
</dependency>
Maven只有 2.2.1版本寨昙,2.2.1版本有一個(gè)問(wèn)題,那就是不兼容docx和pptx掀亩,如果你們不使用jodconverter-2.2.2 中l(wèi)ib舔哪,而想要使用2.2.1版本,需要修改一下 BasicDocumentFormatRegistry
類中的 getFormatByFileExtension
方法:
新建包
com.artofsolving.jodconverter
新建類BasicDocumentFormatRegistry
槽棍,復(fù)制下面代碼
package com.artofsolving.jodconverter;
/**
* @author 李文浩
* @date 2017/12/25
*/
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class BasicDocumentFormatRegistry implements DocumentFormatRegistry {
private List documentFormats = new ArrayList();
public BasicDocumentFormatRegistry() {
}
public void addDocumentFormat(DocumentFormat documentFormat) {
this.documentFormats.add(documentFormat);
}
protected List getDocumentFormats() {
return this.documentFormats;
}
public DocumentFormat getFormatByFileExtension(String extension) {
if (extension == null) {
return null;
} else {
if (extension.indexOf("doc") >= 0) {
extension = "doc";
}
if (extension.indexOf("ppt") >= 0) {
extension = "ppt";
}
if (extension.indexOf("xls") >= 0) {
extension = "xls";
}
String lowerExtension = extension.toLowerCase();
Iterator it = this.documentFormats.iterator();
DocumentFormat format;
do {
if (!it.hasNext()) {
return null;
}
format = (DocumentFormat)it.next();
} while(!format.getFileExtension().equals(lowerExtension));
return format;
}
}
public DocumentFormat getFormatByMimeType(String mimeType) {
Iterator it = this.documentFormats.iterator();
DocumentFormat format;
do {
if (!it.hasNext()) {
return null;
}
format = (DocumentFormat)it.next();
} while(!format.getMimeType().equals(mimeType));
return format;
}
}
下面是增加的部分捉蚤,僅僅增加了將docx按照doc的處理方式處理。而2.2.2版本已經(jīng)默認(rèn)增加了炼七。
if (extension.indexOf("doc") >= 0) {
extension = "doc";
}
if (extension.indexOf("ppt") >= 0) {
extension = "ppt";
}
if (extension.indexOf("xls") >= 0) {
extension = "xls";
}