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

代码如下

package com.oa.commons.jacob;

/**
     * Created by qiuzhb on 2018/5/29.
     * 给word文档添加水印
     */
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.oa.commons.util.FileUtils;

/**
 * Created by qiuzhb on 2018/5/29.
 * 给word文档添加水印
 */
public class test2 {
    // 声明一个静态的类实例化对象
    //private static AddWatermarkUtil test;
    // 声明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;

} else
                return false;
        } catch (Exception e) {
            e.printStackTrace();
            closeDocument();
            closeWordObj();
            return false;
        }
    }
    //重新签名调用此方法
    public boolean addWaterMark1(String wordPath, String waterMarkPath,int left,int top) {
        try {
            if (initWordObj()) {
                openDocument(wordPath);
                getActiveWindow();
                setWaterMark1(waterMarkPath,left,top);
                closeDocument();
                closeWordObj();
                return true;

} else
                return 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,页脚为10
        Dispatch.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(150));
        Dispatch.put(picture, "Height", new Variant(80));

// 关闭页眉
        Dispatch.put(view, "SeekView", new Variant(0));
    }
    public void setWaterMark1(String waterMarkPath,int left,int top) {
        // 取得活动窗格对象
        Dispatch activePan = Dispatch.get(this.activeWindow, "ActivePane")
                .toDispatch();
        // 取得视窗对象
        Dispatch view = Dispatch.get(activePan, "View").toDispatch();
        // 打开页眉,值为9,页脚为10
        Dispatch.put(view, "SeekView", new Variant(9));
        // 获取页眉和页脚
        Dispatch headfooter = Dispatch.get(this.docSelection, "HeaderFooter")
                .toDispatch();
        // 获取水印图形对象
        Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch();
        // 给文档全部加上水印,设置了水印效果,内容,字体,大小,是否加粗,是否斜体,左边距,上边距。
        
          //查看word的开发者工具,使用shapeRange的Delete方法,可删除旧水印 
        Dispatch shapeRange_old = Dispatch.call(shapes, "Range",new Variant(1))
                .toDispatch();
        Dispatch.call(shapeRange_old,"Delete");
        // 调用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(150));
        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();
    }
    
    public static void main(String[] args) {
        
        test2 test2 = new test2();
        String wordPath = "E:/Tomcat8.0/webapps/oa_easyui/upfiles/flow_work/741dcab58ab0403893912b6a3eda9a4c.docx";//word的位置
        String ssString = "E:/Tomcat8.0/webapps/oa_easyui/upfiles/flow_work/e54b0cf720ea4aa0a589e9f2cc8d54b9.png";
        String waterMarkPath =ssString;//要插入水印的位置
        int left =280;
        int top = 580;    
        Boolean sBoolean = test2.addWaterMark1(wordPath, waterMarkPath, left, top);
        if(sBoolean.equals(true)){
        System.out.println("添加成功");
        }else{
            System.out.println("添加失败");
            }
        
    }
    
}

jacob为word添加水印相关推荐

  1. 使用JACOB给WORD添加水印

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

  2. java使用jacob给word添加水印

    1.操作word需要的jacobjar包和dll文件. 2.jar包放到项目中WEB-INF\lib中,或者 mvn install:install-file -Dfile=D:\Users\qiuz ...

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

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

  4. jacob根据word模板生成文

    最近的任务要求根据word模板生成检查报告,选择使用jacob,它对word的支持还可以,它是Java-COM中间件,通过这个组件可以调用COM组件和Win32程序库. 因此它在环境上有一定的局限性. ...

  5. java使用jacob操作word文档

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

  6. word怎么添加水印 word添加水印后为什么看不见

    大家平时在用word编辑文档的时候有没有想过给自己的文档添加水印呢,比如一些不想外传的文档,可以给其添加"机密"字样的水印,提示阅读文档者不要外传.在word文档中添加水印其实很简 ...

  7. java为word添加水印,图片水印和文字水印

    java为word添加水印,图片水印和文字水印 jdk1.5及以上 所需jar包:Spire.Office.jar 或 Spire.Doc.jar jar包下载:https://www.e-icebl ...

  8. POI给WORD添加水印(亲测可用)

    POI给WORD添加水印(亲测可用) 最近要做电子合同,客户提出为了安全性要将合同中都添加水印,这个之前在网上看到过,貌似使用POI很好加.去网上一搜发现,清一色的只有一篇文章,并且这段代码是用不了的 ...

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

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

最新文章

  1. 设计模式之创建型汇总
  2. 分析如下java代码片段,Java内部测试笔试题
  3. 重新审视自己和自己的目标
  4. Python之路 day1 基础1 变量 for while 用户输入
  5. Web前端笔记-画布拖动及放缩(two.js)
  6. Silverlight 信息显示与编辑控件 示例
  7. php采集正则,php不用正则采集速度探究总结
  8. 计算机设备序列号都一样,如何使用adb工具
  9. 序列最小最优化算法(SMO)
  10. Web视频播放总结,avi、swf、兼容IE6/7/8
  11. php把amr转换成mp3,amr怎么转换成mp3 amr文件转换mp3格式
  12. 阿里云P10技术专家褚霸:我是一个程序员
  13. Matlab底层算法实现图像的平移
  14. Android 桌面小部件的背景透明度及颜色的动态实现
  15. 2022树莓派安装甜糖 步骤分享
  16. Kafka eagel 网页能打开,但是登录不上
  17. python timm库
  18. 13 MCMC(Markov Chain Monte Carlo)
  19. [附源码]java毕业设计哈金院食堂美食评价系统
  20. 逆向工程,怎么样和哪里开始?

热门文章

  1. 小红书美妆报告:18岁以下群体对美妆消费量提升158%
  2. STM32怎样实现延时?
  3. 【记录】python3 tkinterUI编辑器应用之索尼walkmanA35播放列表编辑工具
  4. dell更换硬盘识别不了新的硬盘
  5. Service Mesh(服务网格)——后 Kubernetes 时代的微服务
  6. OMF(Oracle Managed Files,Oracle管理的文件)介绍
  7. 神经网络训练不起来,怎么办?
  8. C# 如何在Excel表格中插入、编辑和删除批注(三)删除Excel批注
  9. 11.14-11.21
  10. oracle经常考的题型是哪些,Oracle考试试题(带答案).doc