ActiveXComponent app = new ActiveXComponent(Word.Application)语句不执行

本文详细解析了在使用Java调用Word COM组件进行Word文档转PDF过程中遇到的错误及解决方案,包括正确放置jacob库文件、初始化和释放COM线程等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做将其他格式文件转换为pdf格式是执行到如下:

 ActiveXComponent app = new ActiveXComponent("Word.Application");语句时报错

1、错是由于运行时需要加载对应的类不成功,查看网上的资料发现是缺少了jacob-1.18-M2-x64.dll(64位) 将其放到了jdk/bin文件夹下,运行报错:

由于文件放错了位置,应该放到jdk/jre/bin下。

 

2、可以在new ActiveXComponent("Word.Application") 打看新的word程序之前

     先初始化com的线程ComThread.InitSTA(); 

     在app.invoke("Quit", 0)关闭word程序时同时关闭com的线程  ComThread.Release();  

 public static void wordToPdf(String wordPath) {
        ActiveXComponent app = null;
        String wordFile = wordPath;
        File file = new File(wordFile);
        if(file.exists()){
     	   String fileName = wordFile.substring(0, wordFile.lastIndexOf("."));
     	   String pdfFile = fileName+".pdf";
     	   System.out.println("开始转换...");
     	   _log.info("路径为:"+wordPath+"的word开始转换!");
     	   // 开始时间
     	   long start = System.currentTimeMillis();  
     	   try {
     		   //初始化com的线程   
     		   _log.info("初始化com的线程");
     	       ComThread.InitSTA();   
     	       _log.info("word运行程序对象");
     		   // 打开word
     		   app = new ActiveXComponent("Word.Application");
     		   // 设置word不可见,很多博客下面这里都写了这一句话,其实是没有必要的,因为默认就是不可见的,如果设置可见就是会打开一个word文档,对于转化为pdf明显是没有必要的
     		   //app.setProperty("Visible", false);
     		   // 获得word中所有打开的文档
     		   Dispatch documents = app.getProperty("Documents").toDispatch();
     		   System.out.println("打开文件: " + wordFile);
     		   // 打开文档
     		   Dispatch document = Dispatch.call(documents, "Open", wordFile, false, true).toDispatch();
     		   // 如果文件存在的话,不会覆盖,会直接报错,所以我们需要判断文件是否存在
     		   File target = new File(pdfFile);  
     		   if (target.exists()) {  
     			   target.delete();
     		   }
     		   System.out.println("另存为: " + pdfFile);
     		   // 另存为,将文档报错为pdf,其中word保存为pdf的格式宏的值是17
     		   Dispatch.call(document, "SaveAs", pdfFile, 17);
     		   // 关闭文档
     		   Dispatch.call(document, "Close", false);
     		   
     		   // 结束时间
     		   long end = System.currentTimeMillis();
     		   System.out.println("转换成功,用时:" + (end - start) + "ms");
     		   
         	   _log.info("路径为:"+wordPath+"的word转换成功,用时:" + (end - start) + "ms");
     		   
     		   //删除掉原始word
     		  /* File file2 = new File(wordPath);
     		   if(file2.exists()){
     			   file2.delete();
     		   }*/
     	   }catch(Exception e) {
     		   System.out.println("转换失败"+e.getMessage());
     		   _log.error("路径为:"+wordPath+"的word转换失败,捕获异常:"+e.getMessage(),e);
     	   }finally {
     		   // 关闭office
     		   app.invoke("Quit", 0);
     		   _log.info("转换路径为:"+wordPath+"的word进程关闭");

 		       //关闭com的线程   
 		       ComThread.Release();   
     	   }
        }else{
     	   System.out.println("文件不存在!");
     	   _log.error("路径为:"+wordPath+"的word文件不存在!");
        }
     }



 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值