这是我的源代码:
String filename = "d:\\补充保密协议.doc";
String toFilename = filename + ".pdf";
System.out.println("启动Word...");
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("打开文档..." + filename);
Dispatch doc = Dispatch.call(docs,//
"Open", //
filename,// FileName
false,// ConfirmConversions
true // ReadOnly
).toDispatch();
System.out.println("转换文档到PDF..." + toFilename);
File tofile = new File(toFilename);
if (tofile.exists()) {
tofile.delete();
}
Dispatch.call(doc,//
"SaveAs", //
toFilename, // 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());
e.printStackTrace();
} finally {
if (app != null)
app.invoke("Quit", wdDoNotSaveChanges);
} [align=center][/align]
------解决方案--------------------
Dispatch.invoke(doc,
"SaveAs",
Dispatch.Method,
new Object[] {toFilename},
new int[17]); // 设置17,即转为pdf
这一段代码有问题。
invoke看api最后一个参数是表示错误参数,而不是转换格式的参数,正确的应该为
Dispatch.invoke(doc,
"SaveAs",
Dispatch.Method,
new Object[] {toFilename,new Variant(17)},
new int[1]);