已经把jacob.dll文件放到了系统文件system32下面,在web工程的lib目录下面也有jacob.jar包,tomcat6.0的bin目录下面也有jacob.dll文件,但是运行的时候会出现如下错误:
java.lang.NoSuchMethodError: com.jacob.activeX.ActiveXComponent.getObject()Lcom/jacob/com/Dispatch;求高手指点,急!!! 个人分太少,给10分表示下心意
java.lang.NoSuchMethodError: com.jacob.activeX.ActiveXComponent.getObject()Lcom/jacob/com/Dispatch;求高手指点,急!!! 个人分太少,给10分表示下心意
getObject()方法报错,还是jacob包可能不匹配,或许位置没有放正确。
我的解决步骤:
1、csdn上下载的jacob包,包括一个jacob-1.14.3-x86.dll文件和一个jacob.jar文件
2、把jacob-1.14.3-x86.dll放入 Java\jdk1.5.0_06\jre\bin目录下.
把jacob.jar放入 Java\jdk1.5.0_0\jre\lib\ext
我把system32下面的jacob.jar删除了,只在上面两个目录下放了相应的文件(工程的lib目录下的jacob.jar貌似可以可无)
3、重新启动tomcat服务器这里是实现了一个打印word的功能:主要代码如下:
public void getPrint(String licenseNos, String currentUser) {
String[] licenseNoArray = licenseNos.split(",");
List<LimsMeasCertificate> lmcLst = hibernateTemplateDAO.createCriteria(LimsMeasCertificate.class, Restrictions.in("licenseNo", licenseNoArray)).list();
List<LimsAnnex> laLst = null;
String fileName = null;
//word运行程序对象
ActiveXComponent objWord = null;
Dispatch wordObject = null;
//所有word文档
Dispatch documents = null;
Dispatch document = null;
String filePath = CertificateConstants.UPLODE_FILE_SAVE_PATH;
for (LimsMeasCertificate lmc : lmcLst) {
laLst = hibernateTemplateDAO.createCriteria(LimsAnnex.class, Restrictions.and(Restrictions.eq("businessObject", "LimsMeasCertificate"), Restrictions.eq("businessObjectUniqueId", lmc.getLicenseNo()))).list();
try {
//初始化com线程,重要!!
ComThread.InitSTA();
// Instantiate objWord
objWord = new ActiveXComponent("Word.Application");
for (LimsAnnex la : laLst) {
fileName = la.getAnnexName();
// Assign a local word object
wordObject = (Dispatch) objWord.getObject();
// Create a Dispatch Parameter to hide the document that is opened
Dispatch.put(wordObject, "Visible", new Variant(false));
// Instantiate the Documents Property
documents = objWord.getProperty("Documents").toDispatch();
// Open a word document, Current Active Document
document = Dispatch.call(documents, "Open", filePath+fileName).toDispatch();
Dispatch.call(document, "PrintOut");
}
}catch(Exception e){
e.printStackTrace();
}finally {
ComThread.Release();
}
lmc.setStatus(Constants.PRINT_ED_JUGE);
lmc.setPrintUser(currentUser);
lmc.setPrintDate(getCurrentDateTime());
}
}