此方法经本人亲自测试有效;如果有多个项目采用这种方式转化文件并放在同一个服务器上,可能会出现问题;
1.需要的jar包(这些jar包及dll文件都可以在官网上下载):
注意jacob的jar包版本必须与.dll文件匹配,且有32/64位区分,此处采用64位;
2.jacob-1.14.3-x64.dll文件必须放在指定的路径下,即System.getProperty("java.library.path"),代码中已有注释;
package test2;
import java.io.File;
import java.io.IOException;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
public class Test2{
static final int wdDoNotSaveChanges = 0;// 不保存待定的更改。
static final int wdFormatPDF = 17;// word转PDF 格式
// static final int ppSaveAsPDF = 32;// ppt 转PDF 格式
public static void main(String[] args) throws IOException {
String source1 = "e:\\test.doc";
String target1 = "e:\\test1.pdf";
Test2 pdf = new Test2();
pdf.change(source1, target1);
}
public void change(String source,String target){
//将jacob-1.14.3-x64.dll文件放在下方输出的地址;
System.out.println(System.getProperty("java.library.path"));
long start = System.currentTimeMillis();
ActiveXComponent app = null;
try {
app = new ActiveXComponent("Word.Application");
app.setProperty("Visible", false);
Dispatch docs = app.getProperty("Documents").toDispatch();
System.out.println("打开文档" + source);
Dispatch doc = Dispatch.call(docs,//
"Open", //
source,// FileName
false,// ConfirmConversions
true // ReadOnly
).toDispatch();
System.out.println("转换文档到PDF " + target);
File tofile = new File(target);
if (tofile.exists()) {
tofile.delete();
}
Dispatch.call(doc,//
"SaveAs", //
target, // FileName
wdFormatPDF);
Dispatch.call(doc, "Close", false);
long end = System.currentTimeMillis();
System.out.println("转换完成..用时:" + (end - start) + "ms.");
} catch (Exception e) {
System.out.println("========Error:文档转换失败:" + e.getMessage());
} finally {
if (app != null)
app.invoke("Quit", wdDoNotSaveChanges);
}
}
}