原文链接:http://blog.csdn.net/m0_37568521/article/details/78545887
1、上传:
// 上传文件的路径
String filePathFinal = getRequest().getSession().getServletContext().getRealPath("uploadFiles/resourceManage") + "/";
if (!file[1].isEmpty()) {
//获取文件名
String fileName = file[1].getOriginalFilename();
//文件扩展名
String extName = fileName.substring(fileName.lastIndexOf("."));
String newNameUUID = this.get32UUID();
String newName = newNameUUID + extName;
String filePath = filePathFinal + newName;
// 转存文件
file[1].transferTo(new File(filePath));
if("doc".equals(extName.substring(1, extName.length())) || "docx".equals(extName.substring(1, extName.length()))){
ActiveXComponent app = null;
try {
app = Doc2Pdf.docToPdf(filePath, filePathFinal + newNameUUID + ".pdf");
} catch (Exception e) {
System.out.println("转换失败" + e.getMessage());
} finally {
// 关闭office
app.invoke("Quit", 0);
}
newName = newNameUUID + ".pdf";
}
pd.put("TEXTBOOK_URL","uploadFiles/resourceManage/" + newName);
}
2、Doc2Pdf.java
import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
public class Doc2Pdf {
public static void main(String[] args) {
ActiveXComponent app = null;
try {
app = docToPdf("f:/2pdf/1234.doc", "f:/2pdf/1234.pdf");
} catch (Exception e) {
System.out.println("转换失败" + e.getMessage());
} finally {
// 关闭office
app.invoke("Quit", 0);
}
}
public static ActiveXComponent docToPdf(String wordFile, String pdfFile)
throws Exception {
ActiveXComponent app = null;
System.out.println("开始转换...");
// 开始时间
long start = System.currentTimeMillis();
// 打开word
app = new ActiveXComponent("Word.Application");
// 设置word不可见,很多博客下面这里都写了这一句话,其实是没有必要的,因为默认就是不可见的,如果设置可见就是会打开一个word文档,对于转化为pdf明显是没有必要的
// app.setProperty("Visible", false);
// 获得word中所有打开的文档
Dispatch documents = app.getProperty("Documents").toDispatch();
System.out.println("打开文件: " + wordFile);
// 打开文档
Dispatch document = Dispatch.call(documents, "Open", wordFile, false,
true).toDispatch();
// 如果文件存在的话,不会覆盖,会直接报错,所以我们需要判断文件是否存在
File target = new File(pdfFile);
if (target.exists()) {
target.delete();
}
System.out.println("另存为: " + pdfFile);
// 另存为,将文档报错为pdf,其中word保存为pdf的格式宏的值是17
Dispatch.call(document, "SaveAs", pdfFile, 17);
// 关闭文档
Dispatch.call(document, "Close", false);
// 结束时间
long end = System.currentTimeMillis();
System.out.println("转换成功,用时:" + (end - start) + "ms");
return app;
}
}
注:dll文件,放在jdk文件下面的bin目录下,web项目添加dll文件后需重新添加jdk,电脑要能够打开word的。
jar包下载:链接: https://pan.baidu.com/s/1hupfzyW 密码:r3vs