java 操作word文档加图片水印

package com.tomb.web.admin;
import com.jacob.activeX.ActiveXComponent;  
import com.jacob.com.Dispatch;  
import com.jacob.com.Variant;  
import com.jacob.com.ComThread;  

public class WordInsertPicture {
        public WordInsertPicture() {  
        }  
      
        // 声明一个静态的类实例化对象  
        private static WordInsertPicture 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操作静态实例对象
         *  
         * @return 报表汇总业务操作
         */  
        public final static synchronized WordInsertPicture getInstance() {  
            if (instance == null)  
                instance = new WordInsertPicture();  
            return instance;  
        }  
      
        /**
         * 初始化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;  
        }  
      
        /**
         * 创建一个新的word文档
         *  
         */  
        public void createNewDocument() {  
            // 创建一个新的文档  
            doc = Dispatch.call(wrdDocs, "Add").toDispatch();  
            // 获得当前word文档文本  
            docSelection = Dispatch.get(wrdCom, "Selection").toDispatch();  
        }  
      
        /**
         * 取得活动窗体对象
         *  
         */  
        public void getActiveWindow() {  
            // 获得活动窗体对象  
            activeWindow = wrdCom.getProperty("ActiveWindow").toDispatch();  
        }  
      
        /**
         * 打开一个已存在的文档
         *  
         * @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();  
        }  
      
        /**
         * 关闭当前word文档
         *  
         */  
        public void closeDocument() {  
            if (this.doc != null) {  
                Dispatch.call(this.doc, "Save");  
                Dispatch.call(this.doc, "Close", new Variant(true));  
                this.doc = null;  
            }  
        }  
      
        /**
         * 文档设置图片水印
         *  
         * @param waterMarkPath
         *            水印路径
         */  
        public void setWaterMark(String waterMarkPath) {  
            // 取得活动窗格对象  
            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(0));  
            Dispatch.put(picture, "Top", new Variant(150));  
            Dispatch.put(picture, "Width", new Variant(150));  
            Dispatch.put(picture, "Height", new Variant(280));  
      
            // 关闭页眉  
            Dispatch.put(view, "SeekView", new Variant(0));  
        }  
      
        /**
         * 关闭Word资源
         *  
         *  
         */  
        public void closeWordObj() {  
            // 关闭word文件  
            wrdCom.invoke("Quit", new Variant[] {});  
            // 释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理  
            ComThread.Release();  
        }  
      
        /**
         * 得到文件名
         *  
         * @return .
         */  
        public String getFileName() {  
            return fileName;  
        }  
      
        /**
         * 设置文件名
         *  
         * @param fileName
         *            .
         */  
        public void setFileName(String fileName) {  
            this.fileName = fileName;  
        }  
      
        /**
         * 开始为word文档添加水印
         *  
         * @param wordPath
         *            word文档的路径
         * @param waterMarkPath
         *            添加的水印图片路径
         * @return 是否成功添加
         */  
        public boolean addWaterMark(String wordPath, String waterMarkPath) {  
            try {  
                if (initWordObj()) {  
                    openDocument(wordPath);  
                    getActiveWindow();  
                    setWaterMark(waterMarkPath);  
                    closeDocument();  
                    closeWordObj();
                    return true;  
      
                } else  
                    return false;  
            } catch (Exception e) {  
                e.printStackTrace();  
                closeDocument();  
                closeWordObj();  
                return false;  
            }  
        }  
      
        /**
         * 测试功能
         *  
         */  
        public static void main(String[] argv) {  
            WordInsertPicture wordObj = WordInsertPicture.getInstance();  
            boolean aa =  wordObj.addWaterMark("f://1.docx", "f://b.png");
            System.out.println(aa);
        }  

}


jar包及dll文件下载地址:

点击跳转下载页面

将下载好的文件中根据自己的操作系统选择相应的dll版本,放在D:\Program Files\Java\jdk1.7.0_09\jre\bin目录下,导入jar包即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值