Java代码在Word中的指定位置插入一张图片

在继使用java向word中插入文字,使用java代码将word转为pdf之后,在写一篇使用java代码将图片插入到word文档中。

噢~我无所不能的java语言。

如果以下工具类不可实现 请移步至这篇文章:

最新实用版——JAVA使用POI替换Word模板中指定字符,并可插入图片。

JAVA修改图片固定位置背景色 java中设置图片位置_java修改word文件


我们插入下面这张图片,这是原图,挺大的。

JAVA修改图片固定位置背景色 java中设置图片位置_word插入图片_02


话不多说上代码。

import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class WordUtil_img {
	
	// word运行程序对象
	private ActiveXComponent word;
	// 所有word文档集合
	private Dispatch documents;
	// word文档
	private Dispatch doc;
	// 选定的范围或插入点
	private Dispatch selection;
	// 保存退出
	private boolean saveOnExit;
	
	/**
	 * 是否可见word程序
	 * @param visible true-可见word程序,false-后台默默执行。
	 */
	public WordUtil_img(boolean visible) {
		word = new ActiveXComponent("Word.Application");
		word.setProperty("Visible", new Variant(visible));
		documents = word.getProperty("Documents").toDispatch();
	}
	/**
	 * 打开一个已经存在的Word文档
	 * @param docPath 文件的路径
	 */
	public void openDocument(String docPath) {
		doc = Dispatch.call(documents, "Open", docPath).toDispatch();
		selection = Dispatch.get(word, "Selection").toDispatch();
	}

	/**
	 * 全局将指定的文本替换成图片
	 * @param findText
	 * @param imagePath
	 */
	public void replaceAllImage(String findText, String imagePath, int width, int height){
		moveStart();
		while (find(findText)){
			Dispatch picture = Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
			Dispatch.call(picture, "Select");
			Dispatch.put(picture, "Width", new Variant(width));
			Dispatch.put(picture, "Height", new Variant(height));
			moveStart();
		}
	}
	
	/**
	 * 把插入点移动到文件首位置
	 */
	public void moveStart(){
		Dispatch.call(getSelection(), "HomeKey", new Variant(6));
	}
	
	/**
	 * 获取当前的选定的内容或者插入点
	 * @return 当前的选定的内容或者插入点
	 */
	public Dispatch getSelection(){
		if (selection == null)
			selection = Dispatch.get(word, "Selection").toDispatch();
		return selection;
	}
	
	/**
	 * 从选定内容或插入点开始查找文本
	 * @param findText 要查找的文本
	 * @return boolean true-查找到并选中该文本,false-未查找到文本
	 */
	public boolean find(String findText){
		if(findText == null || findText.equals("")){
			return false;
		}
		// 从selection所在位置开始查询
		Dispatch find = Dispatch.call(getSelection(), "Find").toDispatch();
		// 设置要查找的内容
		Dispatch.put(find, "Text", findText);
		// 向前查找
		Dispatch.put(find, "Forward", "True");
		// 设置格式
		Dispatch.put(find, "Format", "True");
		// 大小写匹配
		Dispatch.put(find, "MatchCase", "True");
		// 全字匹配
		Dispatch.put(find, "MatchWholeWord", "True");
		// 查找并选中
		return Dispatch.call(find, "Execute").getBoolean();
	}
	
	/**
	 * 文档另存为
	 * @param savePath
	 */
	public void saveAs(String savePath){
		Dispatch.call(doc, "SaveAs", savePath);
	}
	
	/**
	 * 关闭word文档
	 */
	public void closeDocument(){
		if (doc != null) {
			Dispatch.call(doc, "Close", new Variant(saveOnExit));
			doc = null;
		}
	}
}

以上就是工具类的源码了,下面我们可以写一个main函数,测试一下。主要调用的是工具类中 replaceAllImage()这个方法。

public static void main(String[] args) {
		WordInsertImg("F:\\我是word.doc","F:\\pikaqiu,jpg");
	}
	
	public static void WordInsertImg(String WordPath,String ImgPaht) {
		WordUtil_img demo = new WordUtil_img(false);//获取工具类对象
		demo.openDocument(WordPath);//打开word
		// 在指定位置插入指定的图片
		demo.replaceAllImage("AAA",ImgPaht,60,60);//AAA是指定的图片位置。后面的两个参数是指定图片的长和宽。
		demo.saveAs("f:\\我是皮卡丘.doc");//插入成功后生成的新word
		demo.closeDocument();//关闭对象。
		System.out.println("插入成功");
	}

在F盘下有 "我是word.doc"这个文件。以及名称为 pikaqiu.jpg 图片。

JAVA修改图片固定位置背景色 java中设置图片位置_JAVA修改图片固定位置背景色_03


word中有“AAA”这个字段,准备替换。

JAVA修改图片固定位置背景色 java中设置图片位置_word插入图片_04


下面我们运行程序。

JAVA修改图片固定位置背景色 java中设置图片位置_JAVA修改图片固定位置背景色_05


显示插入图片成功,下面我们去F盘看一下吧。

JAVA修改图片固定位置背景色 java中设置图片位置_word插入图片_06


可以看到已经有生成的新word打开以后是什么?

JAVA修改图片固定位置背景色 java中设置图片位置_java修改word文件_07


ok,可以看到我们的图片已经插入进来了。而且图片也没有那么大,被固定成60*60的大小。

这个jar和插入文字的是一样的、所以没有多余的jar包。可以去我的另一篇文章 将数据写入word文档中下载jar包