jacob为word增加水印【转】

直接代码

package com.xfzx.test.POI.main;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.jacob.com.ComThread;

public class WordPrintTest
{
   public WordPrintTest()
   {
   }
   private static WordPrintTest instance;
   private Dispatch doc = null;
   private Dispatch activeWindow = null;
   private Dispatch docSelection = null;
   private Dispatch wrdDocs = null;
   private String fileName;
   private ActiveXComponent wrdCom;
   /**
    * 获取Word操作静态实例对象
    * 
    * @return 报表汇总业务操作
    */
   public final static synchronized WordPrintTest getInstance()
   {
      if (instance == null)
         instance = new WordPrintTest();
      return instance;
   }
   /**
    * 初始化Word对象
    * 
    * @return 是否初始化成功
    */
   public boolean initWordObj()
   {
      boolean retFlag = false;
      ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法
      wrdCom = new ActiveXComponent("Word.Application");
      try
      {
         // 返回wrdCom.Documents的Dispatch
         wrdDocs = wrdCom.getProperty("Documents").toDispatch();
         wrdCom.setProperty("Visible", new Variant(true));
         retFlag = true;
      }
      catch (Exception e)
      {
         retFlag = false;
         e.printStackTrace();
      }
      return retFlag;
   }
   /**
    * 创建一个新的word文档
    * 
    */
   public void createNewDocument()
   {
      doc = Dispatch.call(wrdDocs, "Add").toDispatch();
      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();
      }
      doc = Dispatch.call(wrdDocs, "Open", docPath).toDispatch();
      docSelection = Dispatch.get(wrdCom, "Selection").toDispatch();
   }
   /**
    * 关闭当前word文档
    * 
    */
   public void closeDocument()
   {
      if (doc != null)
      {
         Dispatch.call(doc, "Save");
         Dispatch.call(doc, "Close", new Variant(0));
         doc = null;
      }
   }
   /**
    * 文档设置水印
    * 
    * @param waterMarkStr 水印字符串
    */
   public void setWaterMark(String waterMarkStr)
   {
      // 取得活动窗格对象
      Dispatch activePan = Dispatch.get(activeWindow, "ActivePane")
            .toDispatch();
      // 取得视窗对象
      Dispatch view = Dispatch.get(activePan, "View").toDispatch();
      //输入页眉内容
      Dispatch.put(view, "SeekView", new Variant(9));
      Dispatch headfooter = Dispatch.get(docSelection, "HeaderFooter")
            .toDispatch();
      //取得图形对象
      Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch();
      //给文档全部加上水印
      Dispatch selection = Dispatch.call(shapes, "AddTextEffect",
            new Variant(9), waterMarkStr, "宋体", new Variant(1),
            new Variant(false), new Variant(false), new Variant(0),
            new Variant(0)).toDispatch();
      Dispatch.call(selection, "Select");
      //设置水印参数
      Dispatch shapeRange = Dispatch.get(docSelection, "ShapeRange")
            .toDispatch();
      Dispatch.put(shapeRange, "Name", "PowerPlusWaterMarkObject1");
      Dispatch textEffect = Dispatch.get(shapeRange,"TextEffect").toDispatch();
      Dispatch.put(textEffect, "NormalizedHeight", new Boolean(false));
      Dispatch line = Dispatch.get(shapeRange, "Line").toDispatch();
      Dispatch.put(line, "Visible", new Boolean(false));
      Dispatch fill = Dispatch.get(shapeRange, "Fill").toDispatch();
      Dispatch.put(fill, "Visible", new Boolean(true));
      //设置水印透明度
      Dispatch.put(fill, "Transparency", new Variant(0.5));
      Dispatch foreColor = Dispatch.get(fill,"ForeColor").toDispatch();
//设置水印颜色
      Dispatch.put(foreColor, "RGB", new Variant(16711680));
      Dispatch.call(fill, "Solid");
      //设置水印旋转
      Dispatch.put(shapeRange, "Rotation", new Variant(315));
      Dispatch.put(shapeRange, "LockAspectRatio", new Boolean(true));
      Dispatch.put(shapeRange, "Height", new Variant(117.0709));
      Dispatch.put(shapeRange, "Width", new Variant(468.2835));
      Dispatch.put(shapeRange, "Left", new Variant(-999995));
      Dispatch.put(shapeRange, "Top", new Variant(-999995));
      Dispatch wrapFormat = Dispatch.get(shapeRange, "WrapFormat").toDispatch();
      //是否允许交叠
      Dispatch.put(wrapFormat, "AllowOverlap", new Variant(true));
      Dispatch.put(wrapFormat, "Side", new Variant(3));
      Dispatch.put(wrapFormat, "Type", new Variant(3));
      Dispatch.put(shapeRange, "RelativeHorizontalPosition", new Variant(0));
      Dispatch.put(shapeRange, "RelativeVerticalPosition", new Variant(0));
      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;
   }
   /**
    * 测试功能
    * 
    */
   public static void main(String[] argv)
   {
	   WordPrintTest d = WordPrintTest.getInstance();
      try
      {
         if (d.initWordObj())
         {
            d.createNewDocument();
            d.getActiveWindow();
            d.setWaterMark("北京有限责任公司");
            // d.closeWordObj();
         }
         else
            System.out.println("初始化Word读写对象失败!");
      }
      catch (Exception e)
      {
         d.closeWordObj();
      }
   }
}

  

posted @ 2013-04-09 15:48  郑小明  阅读(3031)  评论(0编辑  收藏  举报