Jacob (Java-COM Bridge) 讓 Java 程序能調用 Windows COM 組件。本方案利用 Microsoft Word 自身的 COM 接口(Word.Application),以「隱式啟動 Word → 打開文檔 → 另存為 HTML → 關閉 Word」流程實現高保真格式轉換。
版本要求:JDK 1.4+ 需 Jacob 1.9+ (含 jacob.dll 放入 java.library.path 或 JRE bin 目錄)。
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
1.19 </dependency>
package com.example.doc;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class WordToHtmlConverter {
/**
* Word 文檔轉 HTML
* @param docPath Word 絕對路徑(含擴展名 .doc/.docx)
* @param htmlPath 輸出 HTML 絕對路徑(不含擴展名,將自動生成 .html 及資源文件夾)
*/
public static void convert(String docPath, String htmlPath) {
ActiveXComponent word = new ActiveXComponent("Word.Application");
try {
// 1. 隱藏 Word 窗口
word.setProperty("Visible", new Variant(false));
// 2. 獲取 Documents 集合並打開文檔
// Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, ...)
Dispatch docs = word.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(
docs, "Open", Dispatch.Method,
new Object[]{docPath, new Variant(false), new Variant(true)}, // 不確認轉換、只讀
new int[1]
).toDispatch();
// 3. 另存為 HTML (格式代碼 8 = wdFormatHTML)
Dispatch.invoke(
doc, "SaveAs", Dispatch.Method,
new Object[]{htmlPath, new Variant(8)},
new int[1]
);
// 4. 關閉文檔(不保存變更)
Variant saveChanges = new Variant(false);
Dispatch.call(doc, "Close", saveChanges);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Word 轉 HTML 失敗: " + e.getMessage(), e);
} finally {
// 5. 強制退出 Word 進程,防止殭屍進程
word.invoke("Quit", new Variant[]{});
}
}
public static void main(String[] args) {
convert("C:/docs/輸送調度系統總體方案.doc", "C:/output/輸送調度系統總體方案");
}
}
| 參數/常量 | 含義 |
|---|---|
Visible = false | 後台運行,不彈出 Word 界面 |
Open 第 2/3 參數 | false 不確認格式轉換,true 只讀模式 |
SaveAs 格式代碼 8 | wdFormatHTML,其他常用:10=PDF(需 Word 2007+)、17=XML |
Quit | 必須調用,否則 Word 進程殘留佔用授權/內存 |
jacob.dll (32/64 位匹配 JDK) 放入 %JAVA_HOME%/bin 或啟動參數 -Djava.library.path=path/to/dllDisplayAlerts = false、AutomationSecurity = msoAutomationSecurityForceDisable| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| Jacob + Word COM | 格式保真度最高、支持複雜排版/圖表/公式 | 需 Windows+Word 授權、併發差、部署重 | 企業內網、高保真要求、Windows 服務器 |
| Apache POI | 純 Java、跨平台、開源免費 | 複雜排版/圖表轉 HTML 效果差 | 簡單文檔、文本提取、元數據讀寫 |
| LibreOffice Headless | 跨平台、開源、格式支持廣 | 啟動慢、內存大、字體兼容性依賴系統 | Linux 服務器、批量轉換、無 Word 授權 |
| Aspose.Words | 純 Java、功能最全、無需 Office | 商業收費(昂貴) | 商業項目、高可靠、預算充足 |
Jacob 橋接 Word COM 是「高保真 Word 轉 HTML」在 Windows 平台最經典、成熟的方案。核心要點:隱式啟動、只讀打開、格式代碼 8、強制 Quit、串行化併發。現代項目若需跨平台或無 Office 授權,建議遷移至 LibreOffice Headless 或商業庫 Aspose.Words。