java控制 添加图片到word
2008-10-18 10:50
651 查看
开始做这个功能的时候无从下手,对于jacob 中那个Selection在封装jar(offic_wrapper.jar)包中怎么的也得不到正确应用,总是提示空指针错误。
用word做的宏中都有Selection这个东西去找的,总以为在封装类里面也都是那么找的, 现在才发现我陷入了一个误区,既然他已经给我封装了类,jacob使用selection是为了找到document下的每个对象,而在封装包里,他就可以直接去用你想要用的对象,去调用他下面的方法,根本就不需要再用selection去找。
源代码:
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class testP {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
try{
Dispatch.put(app, "Visible",new Variant(true));//设置word应用程序可见,设置为false,则操作在后台进行
Dispatch documents =Dispatch.get(app,"Documents").toDispatch();//此处创建一个Documents,是因为在word里面操作新建文档的时候是调用的Documents的Add方法
Dispatch document=Dispatch.call(documents,"Add").toDispatch();//创建新文档
Dispatch selection=app.getProperty("Selection").toDispatch();// 获得对Selection组件
Dispatch picture=Dispatch.call(selection,"InlineShapes").toDispatch();//得到InlineShapes,因为插入图片是在该对象下的
Dispatch.invoke(picture, "AddPicture",Dispatch.Method,new Object[]{"d://My Documents//我的图片//褐红.jpg",new Variant(false),new Variant(true)},new int[1]).toDispatch();
//Dispatch.put(picture, "Text","");
Dispatch.call(document,"SaveAs","d://aa//word.doc"); // 保存
Dispatch.call(document, "Close", new Variant(false));
}catch(Exception e){
e.printStackTrace();
}finally{
app.invoke("Quit", new Variant[] {});
app.safeRelease();
}
}
}
而经过封装类包后,我的代码就是:
import org.nethawker.word11.Application;
import org.nethawker.word11.Document;
import org.nethawker.word11.Documents;
import org.nethawker.word11.Range;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class testj {
/**
* @param args
*/
private static Application objWord;
private static Documents documents;
private static Document document;
public static void main(String[] args) {
// TODO Auto-generated method stub
objWord = new Application();
//objWord.setScreenUpdating(false);
objWord.setVisible(true);
documents = objWord.getDocuments();
document = documents.add();
try{
Range range = document.getParagraphs().add().getRange();
range.getInlineShapes().addPicture("d://My Documents//我的图片//褐红.jpg",new Variant(true),new Variant(false));
Thread.sleep(5000);
document.saveAs(new Variant("D://aa//wordTest.doc"));
objWord.quit();
}catch(Exception e){
e.printStackTrace();
}
}
}
呵呵,是不是很简单了。
用word做的宏中都有Selection这个东西去找的,总以为在封装类里面也都是那么找的, 现在才发现我陷入了一个误区,既然他已经给我封装了类,jacob使用selection是为了找到document下的每个对象,而在封装包里,他就可以直接去用你想要用的对象,去调用他下面的方法,根本就不需要再用selection去找。
源代码:
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class testP {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
try{
Dispatch.put(app, "Visible",new Variant(true));//设置word应用程序可见,设置为false,则操作在后台进行
Dispatch documents =Dispatch.get(app,"Documents").toDispatch();//此处创建一个Documents,是因为在word里面操作新建文档的时候是调用的Documents的Add方法
Dispatch document=Dispatch.call(documents,"Add").toDispatch();//创建新文档
Dispatch selection=app.getProperty("Selection").toDispatch();// 获得对Selection组件
Dispatch picture=Dispatch.call(selection,"InlineShapes").toDispatch();//得到InlineShapes,因为插入图片是在该对象下的
Dispatch.invoke(picture, "AddPicture",Dispatch.Method,new Object[]{"d://My Documents//我的图片//褐红.jpg",new Variant(false),new Variant(true)},new int[1]).toDispatch();
//Dispatch.put(picture, "Text","");
Dispatch.call(document,"SaveAs","d://aa//word.doc"); // 保存
Dispatch.call(document, "Close", new Variant(false));
}catch(Exception e){
e.printStackTrace();
}finally{
app.invoke("Quit", new Variant[] {});
app.safeRelease();
}
}
}
而经过封装类包后,我的代码就是:
import org.nethawker.word11.Application;
import org.nethawker.word11.Document;
import org.nethawker.word11.Documents;
import org.nethawker.word11.Range;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class testj {
/**
* @param args
*/
private static Application objWord;
private static Documents documents;
private static Document document;
public static void main(String[] args) {
// TODO Auto-generated method stub
objWord = new Application();
//objWord.setScreenUpdating(false);
objWord.setVisible(true);
documents = objWord.getDocuments();
document = documents.add();
try{
Range range = document.getParagraphs().add().getRange();
range.getInlineShapes().addPicture("d://My Documents//我的图片//褐红.jpg",new Variant(true),new Variant(false));
Thread.sleep(5000);
document.saveAs(new Variant("D://aa//wordTest.doc"));
objWord.quit();
}catch(Exception e){
e.printStackTrace();
}
}
}
呵呵,是不是很简单了。
相关文章推荐
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片(这个不错,可以拿来直接用,非常好)
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片
- Java将图片添加到Word文档内
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片
- Java 实现 word文件添加 图片水印 jacob.jar
- java利用poi添加多张图片到word
- javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片(这个不错,可以拿来直接用,非常好)
- javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
- java导出word、pdf之添加页眉----页眉(指定格式,包括图片和文字)
- [置顶] Java 利用poi给word添加页眉页脚,页眉左边为公司logo图片,右为公司全称,页脚左为公司地址,右为页码总页数
- java jacob 操作word 文档,进行写操作,如生成表格,添加 图片(这个不错,可以拿来直接用,非常好)
- java 操作pdf模板(向指定域添加文本内容和图片)
- java给图片添加水印文字
- java图片移动(键盘控制)
- java 为背景添加图片
- JAVA登陆界面添加背景图片和音乐
- java编程过程中中如何在JFrame面板添加图片作为背景
- java 压缩图片 添加水印