一、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公司机密");
}
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));
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));
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 {
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();
}
}
}