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包即可。