Java代码在Word中的指定位置插入一张图片
在继使用java向word中插入文字,使用java代码将word转为pdf之后,在写一篇使用java代码将图片插入到word文档中。
噢~我无所不能的java语言。
如果以下工具类不可实现 请移步至这篇文章:
最新实用版——JAVA使用POI替换Word模板中指定字符,并可插入图片。
我们插入下面这张图片,这是原图,挺大的。
话不多说上代码。
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 图片。
word中有“AAA”这个字段,准备替换。
下面我们运行程序。
显示插入图片成功,下面我们去F盘看一下吧。
可以看到已经有生成的新word打开以后是什么?
ok,可以看到我们的图片已经插入进来了。而且图片也没有那么大,被固定成60*60的大小。
这个jar和插入文字的是一样的、所以没有多余的jar包。可以去我的另一篇文章 将数据写入word文档中下载jar包