java代碼爲word中添加水印圖片。

這個方法不能說是真正意義上的添加水印,因爲真正添加水印的方法很全面。他可以將字轉爲水印,或者將圖片變成半透明,放入word中。
而我這個方法只是在插入圖片的基礎上,做了一點點改進,可以設置圖片的位置,而不是用字符串寫在固定的位置,用圖片替換。這樣的壞處有兩點,一是他只能固定位置不動,二是他永遠不能覆蓋與你的文本之上。類似人爲的蓋章。他做不到。ok you know!
插入的水印圖片的話,讓你的美工把圖片背景做成透明的就好啦。
下面請看代碼。

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
 * 給word中添加水印。
 * @author root
 *
 */
public class InsertImg{
	private Dispatch activeWindow = null;
 
    public static void main(String []args) {
    	InsertImg Watermarking = new InsertImg();
    	Watermarking.insertPicByjacob("F:\\請示文件.doc","f:\\新請示文件.doc","picture","f:\\yinzhang.png");
    }
    /**
     * 無需關注
     * @param bookmarkName
     * @param imagePath
     * @param width
     * @param height
     */
    public void insertImageAtBookmark(String bookmarkName, String imagePath, int width, int height){
        //Dispatch dispatch = getBookmark(bookmarkName);
        Dispatch dispatch = Dispatch.get(this.activeWindow, "ActivePane").toDispatch();
        if(dispatch != null){
            Dispatch picture = Dispatch.call(Dispatch.get(dispatch, "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
            Dispatch.call(picture, "Select");
            Dispatch.put(picture, "Width", new Variant(width));
            Dispatch.put(picture, "Height", new Variant(height));
            Dispatch ShapeRange = Dispatch.call(picture, "ConvertToShape").toDispatch(); // 取得圖片區域
            Dispatch WrapFormat = Dispatch.get(ShapeRange, "WrapFormat").toDispatch(); // 取得圖片的格式對象
            Dispatch.put(WrapFormat, "Type", 5); // 設置環繞格式(0 - 7)下面是參數說明
			//	wdWrapInline 7 將形狀嵌入到文字中。
			//	wdWrapNone 3 將形狀放在文字前面。請參閱 wdWrapFront 。
			//	wdWrapSquare 0 使文字環繞形狀。行在形狀的另一側延續。
			//	wdWrapThrough 2 使文字環繞形狀。
			//	wdWrapTight 1 使文字緊密地環繞形狀。
			//	wdWrapTopBottom 4 將文字放在形狀的上方和下方。
			//	wdWrapBehind 5 將形狀放在文字後面。
			//	wdWrapFront 6 將形狀放在文字前面。
            Dispatch.call(picture, "Select");
            Dispatch.put(picture, "Left", new Variant(550));
            Dispatch.put(picture, "Top", new Variant(550));
        }
    }
    /**
     * 添加水印代碼
     * @param templatePath
     * @param targetPath
     * @param word
     * @param imagePath
     */
    public void insertPicByjacob(String templatePath, String targetPath, String word, String imagePath) {
 
        System.out.println("啓動word...");
        ActiveXComponent app = null;
        Dispatch doc = null;
        // 模板的路徑
        String openPath = templatePath;
        // 要保存的文件的路徑
        String toFileName = targetPath;
        Dispatch docs = null;
        if (app == null || app.m_pDispatch == 0) {
            app = new ActiveXComponent("Word.Application");
            app.setProperty("Visible", new Variant(false));
            app.setProperty("DisplayAlerts", new Variant(false));
        }
        if (docs == null) {
            // 獲得documents對象
            docs = app.getProperty("Documents").toDispatch();
        }
        doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[] { openPath, new Variant(false), new Variant(true) }, new int[1])
                .toDispatch();
        System.out.println("打開文檔..." + openPath);
        Dispatch selection = app.getProperty("Selection").toDispatch();
        Dispatch find = Dispatch.call(selection, "Find").toDispatch();// 獲得Find組件
        Dispatch.put(find, "Text", word); 							  // 查找字符串
        Dispatch.put(find, "MatchWholeWord", "True"); // 全字匹配
        boolean bl = Dispatch.call(find, "Execute").getBoolean(); // 執行查詢
        Dispatch activeDocument = app.getProperty("ActiveDocument")
                .toDispatch();
        Dispatch bookMarks = app.call(activeDocument, "Bookmarks")
                .toDispatch();
        boolean bookMarkExist = app.call(bookMarks, "Exists", word)
                .toBoolean();
        if (bookMarkExist) {
            Dispatch picture = Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
            Dispatch.call(picture, "Select"); // 選中圖片
           
            Dispatch.put(picture, "Width", new Variant(100)); // 圖片的寬度
            Dispatch.put(picture, "Height", new Variant(100)); // 圖片的高度
            Dispatch ShapeRange = Dispatch.call(picture, "ConvertToShape").toDispatch(); // 取得圖片區域
            Dispatch.put(ShapeRange, "Left", new Variant(360));//圖片的左邊距
            Dispatch.put(ShapeRange, "Top", new Variant(630));//圖片的上邊距
            Dispatch WrapFormat = Dispatch.get(ShapeRange, "WrapFormat").toDispatch(); // 取得圖片的格式對象
            Dispatch.put(WrapFormat, "Type", 6);
            System.out.println(bookMarkExist);
        }
        // 保存文件
        Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { targetPath, new Variant(12) }, new int[1]);
        Dispatch.call((Dispatch) doc, "Close", new Variant(false));
        System.out.println("關閉文檔");
        if (app != null)
            app.invoke("Quit", new Variant[] {});
    }
}

同樣的,也是使用操作word的jar包,這裏多了兩個設置就是需要設置圖片的上邊距,還有左邊距。
下面演示一下。
F盤下有一個.doc文檔 以及一張背景爲透明的印章圖片。
在這裏插入圖片描述

看一下main方法中,調用的方法傳入參數的含義。
Watermarking.insertPicByjacob("F:\\請示文件.doc","f:\\新請示文件.doc","picture","f:\\yinzhang.png");
//第一個參數是原文件,第二個參數是生成的新文件,第三個參數是加入書籤的名字(下圖),第四個參數是圖片

在這裏插入圖片描述
然後我們運行程序。
在這裏插入圖片描述
顯示成功
F盤下也生成了一個新的word文檔
在這裏插入圖片描述
打開看一下
在這裏插入圖片描述
內容是網上拷貝的,沒價值。圖片已經放入到了應該的位置。

			//	wdWrapInline 7 將形狀嵌入到文字中。
			//	wdWrapNone 3 將形狀放在文字前面。請參閱 wdWrapFront 。
			//	wdWrapSquare 0 使文字環繞形狀。行在形狀的另一側延續。
			//	wdWrapThrough 2 使文字環繞形狀。
			//	wdWrapTight 1 使文字緊密地環繞形狀。
			//	wdWrapTopBottom 4 將文字放在形狀的上方和下方。
			//	wdWrapBehind 5 將形狀放在文字後面。
			//	wdWrapFront 6 將形狀放在文字前面。

測試的時候是使用的6,形狀放在文字前面。其他都可用。可以親自試一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章