public class WordFileToPdf {
private static final int wdFormatPDF = 17;
private static final int xlTypePDF = 0;
private static final int ppSaveAsPDF = 32;
private static final String PATH = "D:";
/***
* 判断需要转化文件的类型(Excel、Word、ppt)
*
* @param inputFile
*/
public String convertToPDF(String inputFile) {
//判断原文件是否存在
File file = new File(PATH + inputFile);
if (file.exists()) {
String kind = getFileSufix(inputFile);
if (kind.equals("pdf")) {
return inputFile;//原文件就是PDF文件
}
String pdfFile = inputFile.substring(0, inputFile.lastIndexOf(".")) + ".pdf";
if (kind.equals("doc")||kind.equals("docx")||kind.equals("txt")) {
wordToPDF(PATH+inputFile, PATH+pdfFile);
}else if (kind.equals("ppt")||kind.equals("pptx")||kind.equals("pptm")||kind.equals("ppsx")) {
pptToPDF(PATH+inputFile, PATH+pdfFile);
}else if(kind.equals("xls")||kind.equals("xlsx")){
ExToPDF(PATH+inputFile, PATH+pdfFile);
}else{
return inputFile;//原文件是其它格式文件
}
//返回创建的pdf
return pdfFile;
} else {
System.out.println("原文件不存在!");
return inputFile;
}
}
/***
* 判断文件类型
*
* @param fileName
* @return
*/
public static String getFileSufix(String fileName) {
int splitIndex = fileName.lastIndexOf(".");
return fileName.substring(splitIndex + 1);
}
/***
*
* Word转PDF
*
* @param inputFile
* @param pdfFile
* @return
*/
private void wordToPDF(String inputFile, String pdfFile) {
try {
ComThread.InitSTA(true);
// 打开Word应用程序
ActiveXComponent app = new ActiveXComponent("KWPS.Application");
// 设置Word不可见
app.setProperty("Visible", new Variant(false));
// 禁用宏
app.setProperty("AutomationSecurity", new Variant(3));
// 获得Word中所有打开的文档,返回documents对象
Dispatch docs = app.getProperty("Documents").toDispatch();
// 调用Documents对象中Open方法打开文档,并返回打开的文档对象Document
Dispatch doc = Dispatch.call(docs, "Open", inputFile, false, true).toDispatch();
// word保存为pdf格式宏,值为17
Dispatch.call(doc, "ExportAsFixedFormat", pdfFile, wdFormatPDF);
// 关闭文档
Dispatch.call(doc, "Close", false);
// 关闭Word应用程序
app.invoke("Quit", 0);
ComThread.Release();
} catch (Exception e) {
e.printStackTrace();
}
}
/***
*
* Excel转化成PDF
*
* @param inputFile
* @param pdfFile
* @return
*/
private void ExToPDF(String inputFile, String pdfFile) {
try {
ComThread.InitSTA(true);
ActiveXComponent ax = new ActiveXComponent("KET.Application");
ax.setProperty("Visible", false);
ax.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
Dispatch excels = ax.getProperty("Workbooks").toDispatch();
Dispatch excel = Dispatch
.invoke(excels, "Open", Dispatch.Method,
new Object[] { inputFile, new Variant(false), new Variant(false) }, new int[9])
.toDispatch();
// 转换格式
Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[] { new Variant(0),pdfFile, new Variant(xlTypePDF)}, new int[1]);
Dispatch.call(excel, "Close", new Variant(false));
if (ax != null) {
ax.invoke("Quit", new Variant[] {});
}
ComThread.Release();
} catch (Exception e) {
e.printStackTrace();
}
}
/***
* ppt转化成PDF
*
* @param inputFile
* @param pdfFile
* @return
*/
private void pptToPDF(String inputFile, String pdfFile) {
try {
ComThread.InitSTA(true);
ActiveXComponent app = new ActiveXComponent("KWPP.Application");
Dispatch ppts = app.getProperty("Presentations").toDispatch();
Dispatch ppt = Dispatch.call(ppts, "Open", inputFile, true,false).toDispatch();
Dispatch.invoke(ppt, "SaveAs", Dispatch.Method, new Object[]{
pdfFile,new Variant(ppSaveAsPDF)},new int[1]);
Dispatch.call(ppt, "Close");
app.invoke("Quit");
} catch (Exception e) {
e.printStackTrace();
}
}
}
下载jacob,将其中的jacob.jar添加到项目的lib中并构建。
将jacob-1.18-x64.dll添加到C:\Program Files\Java\jdk1.8.0_72\bin、C:\Program Files\Java\jdk1.8.0_72\jre\bin、C:\WINDOWS\system32 中(我只在jdk中添加的)。