JACOB调用WORD书签修改WORD文档,并生成html显示到页面中

首先要下载JACOB

 下载地址:http://sourceforge.net/projects/jacob-project/

下载Jacob的发布包,里面应该包含一个jar包:jacob.jar(放在项目的classpath下)

两个dll文件:jacob-1.15-M4-x64.dll、jacob-1.15-M4-x86.dll

两个dll文件请根据系统架构属性选择其中一个

Tomcat服务器:放入Tomcat  ~/bin 目录下

WebLogic服务器:放入 Oracle/Middleware/wlserver_10.3/server/bin 目录下

 

代码如下:

//系统路径
String path = request.getSession().getServletContext().getRealPath("");
//资源存放路径
String sourcePath = path + "/template/download/";
String wordFileName = chartStatic.WORDNAME+wordMap.get("year").toString()+".doc";
String wordFilePath = sourcePath+wordFileName;  //初始文件地址
ActiveXComponent MsWordApp = null;
Dispatch document = null;
ComThread.startMainSTA();//启动一个主线程
ComThread.InitMTA(true);
MsWordApp = new ActiveXComponent("Word.Application");
Dispatch documents = MsWordApp.getProperty("Documents").toDispatch();
//打开文档
document = Dispatch.call(documents, "Open", wordFilePath).toDispatch();
//获取书签
Dispatch bookMarks = Dispatch.call(document, "Bookmarks").toDispatch();
Dispatch rangeItem = null;
Dispatch range = null;

装配数据到Word

//装配文字
setDispatch(chartStatic.SR_DATA_END,wordMap.get(chartStatic.SR_DATA_END).toString(),bookMarks);
//装配图片
setDispatchImages(chartStatic.SR_IMG_BAR,filenameBar,bookMarks);

两个封装方法

/**
     * 把数据放入对应的书签
     * @param bookmarkName word 中的书签名
     * @param bookmarkValue 把值插入此数千名中
     * @param bookMarks 所有的书签名
     * @return
     */
    private boolean setDispatch(String bookmarkName,String bookmarkValue,Dispatch bookMarks){
        Dispatch rangeItem = null;
        Dispatch range = null;
        boolean bookMarkExist = Dispatch.call(bookMarks, "Exists", bookmarkName).getBoolean();
        if(bookMarkExist){
            //替换文字
            rangeItem = Dispatch.call(bookMarks,
                    "Item", bookmarkName).toDispatch();
            range = Dispatch.call(rangeItem, "Range")
                    .toDispatch();
            //替换文字
            Dispatch.put(range, "Text", new Variant(bookmarkValue));
        }
        return bookMarkExist;
    }

    /**
     * 把图片放入对应的书签中
     * 
     * @param bookmarkName
     *            word中的标签名
     * @param picFileName
     *            图片路径
     * @param bookMarks
     *            所有标签名
     * @return
     */
    private boolean setDispatchImages(String bookmarkName,String picFileName,Dispatch bookMarks){
        Dispatch rangeItem = null;
        Dispatch range = null;
        boolean bookMarkExist = Dispatch.call(bookMarks, "Exists", bookmarkName).getBoolean();
        if(bookMarkExist){
            rangeItem = Dispatch.call(bookMarks,"Item", bookmarkName).toDispatch();
            range = Dispatch.call(rangeItem, "Range").toDispatch();
            //生成图片
       File imgfile = new File(System.getProperty("java.io.tmpdir"), picFileName);
       //替换图片
        Dispatch picture = Dispatch.call(Dispatch.get(range,"InLineShapes").toDispatch(),"AddPicture", imgfile.getAbsolutePath()).toDispatch();
        }
        return bookMarkExist;
    }

保存,关闭文件。

//保存,关闭文件
if (document != null) {
    Dispatch.call(document, "Save");
    Dispatch.call(document, "Close", new Variant(0));
}
if (MsWordApp != null) {
    MsWordApp.invoke("Quit", new Variant[0]);
}
ComThread.Release();//释放
ComThread.quitMainSTA();//关闭

保存为Html

//保存为html
Dispatch.invoke(document,"SaveAs",Dispatch.Method,   
                    new Object[]{htmlFile, new Variant(8)},//7为txt格式, 8保存为html格式   
                    new int[1]);

效果图如下

 

posted @ 2014-03-25 10:40  登山看日出  阅读(869)  评论(0编辑  收藏  举报