使用jacob进行word操作

打印 上一主题 下一主题

主题 1740|帖子 1740|积分 5220

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
由于项目必要,必要在后台对word文档中的书签进行重新填值,并进行打印。一开始已经使用Spire.Doc for Java实现了这个结果,但是这个插件是收费的,公司不想买,于是就在网上找了一段时间开源的插件,最终用了JACOB这个插件。下面记录一下实现的方法
1、使用准备
jacob下载地址:https://github.com/freemansoft/jacob-project/releases
2、使用方法
添加到项目:将jacob-1.18.jar复制到你的项目的类路径下,或是通过构建工具如Maven或Gradle的依赖管理添加。
  1.      <dependency>
  2.             <groupId>com.jacob</groupId>
  3.             <artifactId>jacob</artifactId>
  4.             <version>1.18</version>
  5.      </dependency>
复制代码
DLL放置:确保对应的.dll文件位于可访问的系统路径中,大概直接放在Java实行目录下,以便于JVM加载。
示例代码:在你的Java步伐中,你可以开始使用Jacob提供的API来创建和操作COM对象,例如自动化Word文档处理惩罚等。
  1. import com.jacob.activeX.ActiveXComponent;
  2. import com.jacob.com.ComThread;
  3. import com.jacob.com.Dispatch;
  4. import com.jacob.com.Variant;
  5. import lombok.extern.slf4j.Slf4j;
  6. import java.io.File;
  7. @Slf4j
  8. public class WordConvertPdf {
  9.     private static final int wdFormatPDF = 17; // PDF 格式
  10.     public static void wordToPDF(String sourceFilePath, String targetFilePath) {
  11.         log.info("启动 Word...");
  12.         long start = System.currentTimeMillis();
  13.         ActiveXComponent app = null;
  14.         Dispatch doc = null;
  15.         try {
  16.             app = new ActiveXComponent("Word.Application");
  17.             app.setProperty("Visible", new Variant(false));
  18.             Dispatch docs = app.getProperty("Documents").toDispatch();
  19.             doc = Dispatch.call(docs, "Open", sourceFilePath).toDispatch();
  20.             log.info("打开文档..." + sourceFilePath);
  21.             log.info("转换文档到 PDF..." + targetFilePath);
  22.             File tofile = new File(targetFilePath);
  23.             if (tofile.exists()) {
  24.                 tofile.delete();
  25.             }
  26.             Dispatch.call(doc, "SaveAs", targetFilePath, // FileName
  27.                     wdFormatPDF);
  28.             long end = System.currentTimeMillis();
  29.             log.info("转换完成..用时:" + (end - start) + "ms.");
  30.         } catch (Exception e) {
  31.             log.info("========Error:文档转换失败:" + e.getMessage());
  32.         } finally {
  33.             Dispatch.call(doc, "Close", false);
  34.             log.info("关闭文档");
  35.             if (app != null)
  36.                 app.invoke("Quit", new Variant[]{});
  37.         }
  38.         // 如果没有这句话,winword.exe进程将不会关闭
  39.         ComThread.Release();
  40.     }
  41.     public static void main(String[] args) {
  42.         WordConvertPdf d = new WordConvertPdf();
  43.         d.wordToPDF("/Users/xdai/项目/一体化/开发文档/技术文件/部署文件/template/外网/任务书封面封底-京.docx", "/Users/xdai/项目/一体化/开发文档/技术文件/部署文件/template/外网/上海骄成机电设备有限公司企业发展分析报告.pdf");
  44.     }
  45. }
复制代码
留意事项
在生产环境中使用时,发起详细测试以保证兼容性和稳固性。
若碰到 UnsatisfiedLinkError错误,请确认.dll文件的位置是否正确,且系统架构与DLL匹配。
版权与许可:请遵循Jacob项目的相干许可协议使用此资源。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表