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

在做将其他格式文件转换为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文件不存在!");
        }
     }



 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
jacob-1.18 包含jacob-1.18-x64.dll jacob-1.18-x86.dll 亲测可用: 下面为转pdf使用方法 package com.pdf.doctopdf.pdf; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import java.io.File; public class TestJacob { public static void main(String args[]) { ActiveXComponent app = null; String wordFile = "C:\\Users\\admin\\Desktop\\jar\\年会系统优化_20210820_V0.2.docx"; String pdfFile = "C:\\Users\\admin\\Desktop\\jar\\测试pdf.pdf"; System.out.println("开始转换..."); // 开始时间 long start = System.currentTimeMillis(); try { // 打开word app = new ActiveXComponent("Word.Application"); // 获得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"); }catch(Exception e) { e.getMessage(); System.out.println("转换失败"+e.getMessage()); }finally { // 关闭office app.invoke("Quit", 0); } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值