遇到一個很棘手的問題,freemarker生成word之后目錄頁碼如何更新,在線等,很急
uj5u.com熱心網友回復:
一個月了 沒有大佬理下我嗎
uj5u.com熱心網友回復:
結合jacob可以更新目錄package com.key.words.convert;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class WordCatalog {
/**
* 目錄生成
* @param oldPath 源檔案
* @param wirtePath 存盤路徑
* @return
*/
public static void updateWord(String oldPath,String wirtePath){
ActiveXComponent app = new ActiveXComponent("Word.Application"); //啟動word
try {
//app.setProperty("Visible", new Variant(true)); //設定word不可見
app.setProperty("Visible", new Variant(false));
Dispatch docs = app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,
new Object[] { oldPath, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
Dispatch activeDocument = app.getProperty("ActiveDocument").toDispatch();
/**
* 更新目錄部分代碼
*
* 獲取目錄*/
Dispatch tablesOfContents = Dispatch.get(activeDocument,"TablesOfContents").toDispatch();
/**獲取第一個目錄。若有多個目錄,則傳遞對應的引數*/
Variant tablesOfContent = Dispatch.call(tablesOfContents,"Item", new Variant(1));
/**更新目錄,有兩個方法:Update 更新域,UpdatePageNumbers 只更新頁碼*/
Dispatch toc = tablesOfContent.toDispatch();
toc.call(toc,"Update");
System.out.println("另存完成");
Dispatch.call(doc, "SaveAs",wirtePath); //另存檔案
Dispatch.call(doc, "Close", new Variant(false));
System.out.println("is over");
} catch (Exception e) {
e.printStackTrace();
}finally{
app.invoke("Quit",new Variant[]{});
app.safeRelease();
}
}
}
uj5u.com熱心網友回復:
謝謝 這個我也知道了 但是這個只支持Windows環境 在Linux是不支持的
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
這個支持大批量更新嗎?我現在使用的是插入目錄的方式,但種方式沒法支持大批量檔案更新,找不到解決方法....
uj5u.com熱心網友回復:
你說的大批量更新是啥意思 ??? 好幾個目錄???uj5u.com熱心網友回復:
這個問題你解決了沒轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244387.html
標籤:Web 開發
上一篇:Java監聽事件中怎么實作組合鍵
