1、操作word需要的jacobjar包和dll文件。

2、jar包放到项目中WEB-INF\lib中,或者

mvn install:install-file -Dfile=D:\Users\qiuzhb\Downloads\jacob-1.18-M2\jacob.jar -DgroupId=com.jacob -DartifactId=jacob -Dversion=1.0 -Dpackaging=jar

这样导入maven项目中。dll根据自己系统版本放到对应的位置,我的是64,所以选择x64.dll放到windows\system32,如果是32的是放到windows\system中,同时也放到jdk\jre\bin中

3、给word添加水印

/*** Created by qiuzhb on 2018/5/29.* 给word文档添加水印*/
public class AddWatermarkUtil {// 声明一个静态的类实例化对象private static AddWatermarkUtil instance;// 声明word文档对象private Dispatch doc = null;// 声明word文档当前活动视窗对象private Dispatch activeWindow = null;// 声明word文档选定区域或插入点对象private Dispatch docSelection = null;// 声明所有word文档集合对象private Dispatch wrdDocs = null;// 声明word文档名称对象private String fileName;// 声明ActiveX组件对象:word.Application,Excel.Application,Powerpoint.Application等等private ActiveXComponent wrdCom;/*** 开始为word文档添加水印** @param wordPath*            word文档的路径* @param waterMarkPath*            添加的水印图片路径* @return 是否成功添加*/public boolean addWaterMark(String wordPath, String waterMarkPath,int left,int top) {try {if (initWordObj()) {openDocument(wordPath);getActiveWindow();setWaterMark(waterMarkPath,left,top);closeDocument();closeWordObj();return true;} elsereturn false;} catch (Exception e) {e.printStackTrace();closeDocument();closeWordObj();return false;}}/*** 初始化Word对象** @return 是否初始化成功*/public boolean initWordObj() {boolean retFlag = false;ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法wrdCom = new ActiveXComponent("Word.Application");// 实例化ActiveX组件对象:对word进行操作try {/** 返回wrdCom.Documents的Dispatch* 获取Dispatch的Documents对象,可以把每个Dispatch对象看成是对Activex控件的一个操作* 这一步是获得该ActiveX控件的控制权。*/wrdDocs = wrdCom.getProperty("Documents").toDispatch();// 设置打开的word应用程序是否可见wrdCom.setProperty("Visible", new Variant(false));retFlag = true;} catch (Exception e) {retFlag = false;e.printStackTrace();}return retFlag;}/*** 打开一个已存在的文档** @param docPath*/public void openDocument(String docPath) {if (this.doc != null) {this.closeDocument();}this.doc = Dispatch.call(wrdDocs, "Open", docPath).toDispatch();this.docSelection = Dispatch.get(wrdCom, "Selection").toDispatch();}/*** 取得活动窗体对象**/public void getActiveWindow() {// 获得活动窗体对象activeWindow = wrdCom.getProperty("ActiveWindow").toDispatch();}/*** 文档设置图片水印** @param waterMarkPath*            水印路径*/public void setWaterMark(String waterMarkPath,int left,int top) {// 取得活动窗格对象Dispatch activePan = Dispatch.get(this.activeWindow, "ActivePane").toDispatch();// 取得视窗对象Dispatch view = Dispatch.get(activePan, "View").toDispatch();// 打开页眉,值为9,页脚为10Dispatch.put(view, "SeekView", new Variant(9));// 获取页眉和页脚Dispatch headfooter = Dispatch.get(this.docSelection, "HeaderFooter").toDispatch();// 获取水印图形对象Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch();// 给文档全部加上水印,设置了水印效果,内容,字体,大小,是否加粗,是否斜体,左边距,上边距。// 调用shapes对象的AddPicture方法将全路径为picname的图片插入当前文档Dispatch picture = Dispatch.call(shapes, "AddPicture", waterMarkPath).toDispatch();// 选择当前word文档的水印Dispatch.call(picture, "Select");Dispatch.put(picture, "Left", new Variant(left));Dispatch.put(picture, "Top", new Variant(top));Dispatch.put(picture, "Width", new Variant(80));Dispatch.put(picture, "Height", new Variant(80));// 关闭页眉Dispatch.put(view, "SeekView", new Variant(0));}/*** 关闭当前word文档**/public void closeDocument() {if (this.doc != null) {Dispatch.call(this.doc, "Save");Dispatch.call(this.doc, "Close", new Variant(true));this.doc = null;}}/*** 关闭Word资源***/public void closeWordObj() {// 关闭word文件wrdCom.invoke("Quit", new Variant[] {});// 释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理ComThread.Release();}}

4、如果一次性要给一个word填加两张水印,可以再setWaterMaker()方法后面加个方法。我之前是操作完后再次调用这个工具类,导致报错,原因是写入word的io流还没有结束,又立马操作。然后解决办法是让主线程等个2s,这效率就很低了。

5、如果你的业务碰到在多页word中,只有一页要添加水印的,请看jacob添加图片!

ps:菜鸡写博客,有问题请指正!!!

java使用jacob给word添加水印相关推荐

  1. java使用jacob操作word添加图片

    1.操作word需要的jacobjar包和dll文件.(请多多支持!) java使用jacob给word添加水印.这是给word添加水印,当业务需求在多页word文档中,某一页添加水印一样的盖章,这个 ...

  2. 使用JACOB给WORD添加水印

    使用JACOB给WORD添加水印 代码如下 代码如下 package com;import com.jacob.activeX.ActiveXComponent; import com.jacob.c ...

  3. JAVA使用jacob判断word附件是否加密

    java判断word附件是否加密和word转换pdf JAVA使用jacob判断word附件是否加密 JAVA使用jacob判断word附件是否加密 String overFile pdf输出路径 S ...

  4. java 使用jacob实现word转pdf

    java 使用jacob实现word转pdf(IDEA Maven项目) 步骤: 一. 插件与jar包下载 SaveAsPDFandXPS 下载地址: http://www.microsoft.com ...

  5. 总结java关于jacob操作word这几天遇到的问题!

    由于这几天的客户需求使用到了java关于jacob操作word的问题,下面对这几天遇到的问题进行一下总结: 本机第一次使用jacob的时候,本机装的WPS接下来一路畅通,直到最后完成word的导出功能 ...

  6. java 使用jacob实现word、excle、ppt、图片转pdf

    java 使用jacob实现word.excle.ppt.图片转pdf IDEA Maven 微服务项目示例 示例: 步骤: 1.jarcob jar包.插件下载 SaveAsPDFandXPS 下载 ...

  7. jacob为word添加水印

    想请教一下大佬们 我是用jacob来为word添加水印,word添加上了 但是是所有页面dou都添加了,请问一下怎么只在word最后一页添加水印呢? 代码如下 package com.oa.commo ...

  8. java使用jacob操作word文档

    ava使用jacob操作word文档 java调用com组件操作word使用总结(jacob) 简单描述 在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office ...

  9. Java使用Jacob转换Word为HTML

    从今天开始,我也要养成记录开发中遇到的问题和解决方法的好习惯! 最近开发一个Android项目,需要用到查看Word和Pdf文档的功能,由于Android没有直接显示Word和PDF文档的组件,只有一 ...

最新文章

  1. 谷歌大脑最新研究:不用「训练」!高斯过程「超越」随机梯度下降
  2. Web测试实践-任务进度-Day02
  3. 2019.7.15随笔
  4. SQL注入手工注入常用的语句
  5. wdcp mysql数据库无法链接_MySQL数据库之阿里云服务器中centos7 解决wdcp中不能远程访问mysql服务的问题...
  6. 我的学习之路_第十四章_反射
  7. Python+opencv图片合成视频
  8. 互联网日报 | 微信红包封面向个人开放;每日优鲜获青岛战略投资20亿元;中国银联发布“银联云”...
  9. 点击选择-图片添加对号(单选)
  10. 用c语言求解n阶线性矩阵方程组,求解N阶线性矩阵方程
  11. 27岁,大专学历,女程序员内心的感受和行业焦虑
  12. 基于https搭建habor私有库
  13. 消息推送配置url(服务器地址),设置推送url接口
  14. H3C交换机常用命令(初学)
  15. 【新闻文本分类】(task5)TextCNN(更新ing)
  16. 按键精灵打开网站,保存截图到文件夹
  17. 五种常见的DNS攻击类型及应对方式
  18. 超详细!4小时开发一个SpringBoot+vue前后端分离博客项目!!
  19. 【Cocos Creator】 使用 TTF 以及文本配置动态生成位图字体的解决方案
  20. Barra模型因子的构建及应用(一)

热门文章

  1. 37Java流程控制-打印三角形及debug练习
  2. 桌面新建文件夹不显示缩图_如何在Windows 10桌面上创建不可见的文件夹
  3. 浙江师范大学实验室开放项目《应用水晶报表快速开发数据库管理系统》学生名单登记表(给学分名单)
  4. 精通 Python OpenCV4:第二部分
  5. Win中安装虚拟机+CentOS
  6. n918st能刷Android5吗?,中兴 N918st(V5S 双4G版)获取Root权限服务含精简系统方案
  7. c语言isfinite用法,C# Single.IsFinite()用法及代码示例
  8. python基础训练—列表
  9. 武魂java_ArrayLIst的使用
  10. 未来计算机取代教师,三、综合运用阅读下面材料,完成下列小题未来是“人机共教”的时代。教师作为一种职业不会被取代,并不意味着所有教师都不会被淘汰重复性、机械性工作都可以交给人工智能,-组卷网...