jacob为word和excel加水印

一、word加水印

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.List;

public class WordUtils {

    public static void main(String[] args) throws Exception {
        addWatermark("C:/test.doc", "C:/newTest.doc","xxx公司机密");
    }
	//https://docs.microsoft.com/zh-cn/office/vba/api/word.document 文档参考
    public static void addWatermark(String src, String des, String text) throws Exception {
        ComThread.InitMTA();
        ActiveXComponent wordApp =  new ActiveXComponent("word.Application");
        // 文档隐藏时进行应用操作
        wordApp.setProperty("Visible", new Variant(false));
        // 实例化模板Workbooks对象
        Dispatch documents = wordApp.getProperty("Documents").toDispatch();
        //打开文件
        Dispatch doc = Dispatch.call(documents, "Open", src, new Variant(false),new Variant(false)).toDispatch();
        Dispatch docSelect = Dispatch.get(wordApp, "Selection").toDispatch();
        //取得活动窗体对象
        Dispatch activeDoc = wordApp.getProperty("ActiveWindow").toDispatch();
        try {
            //添加水印,多个水印
            for (int i = 0; i < 3; i++) {
                for (int j = 0; j < 4; j++) {
                    //取得活动窗体对象
                    Dispatch activePan = Dispatch.get(activeDoc, "ActivePane").toDispatch();
                    //取得视窗对象
                    Dispatch view = Dispatch.get(activePan, "View").toDispatch();
                    //打开页眉
                    Dispatch.put(view, "SeekView", new Variant(9));
                    //获取页眉和页脚
                    Dispatch headfooter = Dispatch.get(docSelect, "HeaderFooter")
                            .toDispatch();
                    //取得图形对象
                    Dispatch shapes = Dispatch.get(headfooter, "Shapes").toDispatch();
                    /**插入文字,并转为图片:
                     * 操作对象、方法、艺术字格式、水印内容、字体、字体大小、字体是否粗体、字体是否斜体、左边距、上边距
                     */
                    Dispatch selection = Dispatch.call(shapes, "AddTextEffect",
                            new Variant(9), text, "宋体", new Variant(10),
                            new Variant(false), new Variant(false), new Variant(0),
                            new Variant(0)).toDispatch();
                    //选中当前文档水印
                    Dispatch.call(selection, "Select");
                    Dispatch shapeRange = Dispatch.get(docSelect, "ShapeRange")
                            .toDispatch();
                    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(16711620));
                    Dispatch.call(fill, "Solid");
                    // 设置水印旋转
                    Dispatch.put(shapeRange, "Rotation", new Variant(315));
                    Dispatch.put(shapeRange, "LockAspectRatio", new Boolean(true));
                    //设置水印宽高
                    Dispatch.put(shapeRange, "Height", new Variant(11));
                    Dispatch.put(shapeRange, "Width", new Variant(90));
                    //设置水印位置,相对左上角
                    Dispatch.put(shapeRange, "Left", new Variant(j * 120 - 60));
                    Dispatch.put(shapeRange, "Top", new Variant(i * 270));
                    //恢复视图
                    Dispatch.put(view, "SeekView", new Variant(0));
                }
            }
            //另存为目标文件
            Dispatch.call(doc, "SaveAS",des,new Variant(true) );
        } catch (Exception e) {
           e.printStackTrace();
        } finally {
            Dispatch.call(doc, "Close", new Variant(-1),new Variant(1),new Variant(true));
            if (wordApp != null) {
                wordApp.invoke("Quit", new Variant[]{});
            }
            ComThread.Release();
        }
    }
}

二、excel添加水印

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Variant;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;

public class ExcelUtils {
    public static void main(String[] args) throws Exception {     
        addWatermark("C:/test.xls", "C:/newTest.xls","C:/test.png" );
    }

    public static void addWatermark(String srcPath, String desPath, String imgPath) throws Exception {
        ComThread.InitMTA();
        ActiveXComponent excelApp = new ActiveXComponent("Excel.Application");
        // 文档隐藏时进行应用操作
        excelApp.setProperty("Visible", new Variant(false));
        excelApp.setProperty("DisplayAlerts",new Variant(false));
        // 实例化模板Workbooks对象
        Dispatch workbooks = excelApp.getProperty("Workbooks").toDispatch();
        Dispatch xls=Dispatch.invoke(workbooks, "Open", Dispatch.Method, new Object[]{srcPath, new Variant(false), new Variant(false)}, new int[1]).toDispatch();
        try {
            //获取工作簿里sheet个数
            int num = Dispatch.get(Dispatch.get(xls, "sheets").toDispatch(), "count").toInt();
            //添加水印
            for (int i = 1; i <= num; i++) {
                Dispatch sheets = Dispatch.invoke(Dispatch.get(xls, "sheets").toDispatch(), "Item", Dispatch.Get, new Object[]{i}, new int[1]).toDispatch();
                Dispatch.call(sheets, "SetBackgroundPicture", imgPath);
            }
            //取消兼容性检查
            Dispatch.put(xls, "CheckCompatibility", false);
            //另存为目标文件
            Dispatch.call(xls, "SaveAs", desPath);
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
            Dispatch.call(xls, "Close", new Variant(true));
            excelApp.setProperty("DisplayAlerts",new Variant(true));
            if (excelApp != null) {
                excelApp.invoke("Quit", new Variant[]{});
            }
            ComThread.Release();

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值