日期:2014-05-19  浏览次数:21532 次

利用jacob将Word转成PDF时候报错:Invoke of: SaveAs
这是我的源代码:

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]);