首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 抽取 Word/PDF 文本的四大方案實戰對比

     編輯:Java 相關知識

方案一:Jacob —— COM 橋接調用 Microsoft Word

原理:Jacob (Java-COM Bridge) 調用 Word.Application COM 組件,將文檔另存為 HTML/XML,再解析文本。

依賴

  • jacob.jar + 平台相關 jacob.dll (放入 PATH)。
  • 需目標機安裝 Microsoft Word。

核心代碼

ActiveXComponent word = new ActiveXComponent("Word.Application");
word.setProperty("Visible", new Variant(false));
Dispatch docs = word.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method,
        new Object[]{inFile, new Variant(false), new Variant(true)}, new int[1]).toDispatch();
Dispatch.invoke(doc, "SaveAs", Dispatch.Method,
        new Object[]{htmlFile, new Variant(8)}, new int[1]); // 8 = wdFormatHTML
Dispatch.call(doc, "Close", new Variant(false));
word.invoke("Quit", new Variant[]{});

優缺點

  • ✅ 支援 Word 所有格式 (.doc/.docx)、複雜排版完美還原。
  • ❌ 強依賴 Windows + Word 安裝,無法在 Linux 服務器運行;啟動 Word 進程慢、佔內存大;需處理 COM 異常與資源釋放。

方案二:Apache POI —— 純 Java 解析 .doc/.docx

原理:POI 直接解析 OLE2 (doc) / OOXML (docx) 結構,提取文本。

依賴

  • poi.jar、poi-ooxml.jar、xmlbeans.jar 等。

核心代碼

// .doc (HWPF)
FileInputStream fis = new FileInputStream("a.doc");
WordExtractor extractor = new WordExtractor(fis);
String text = extractor.getText();

// .docx (XWPF)
XWPFDocument doc = new XWPFDocument(new FileInputStream("a.docx"));
String text = doc.getText();

優缺點

  • ✅ 純 Java,跨平台;支援 .doc/.docx;無需 Office 安裝。
  • ❌ 複雜排版(表格、浮動圖片、文本框)文本提取順序可能亂碼;大文件記憶體佔用高 (建議用 SAX 事件式 API)。

方案三:PDFBox —— 純 Java 解析 PDF

原理:PDFBox 解析 PDF 結構,PDFTextStripper 提取文本。

依賴

  • pdfbox.jar、fontbox.jar。

核心代碼

PDDocument pdf = PDDocument.load(new File("a.pdf"));
PDFTextStripper stripper = new PDFTextStripper();
String text = stripper.getText(pdf);
pdf.close();

優缺點

  • ✅ 純 Java,跨平台;Apache 項目活躍維護。
  • ❌ 中文支援較弱:需嵌入字體或映射 Unicode,否則提取亂碼/空白;複雜版面(多欄、旋轉文本)提取順序不可控。

方案四:Xpdf (pdftotext.exe) —— 原生命令行工具封裝

原理:調用 Xpdf 開源項目的 pdftotext.exe 進程,輸出 UTF-8 文本。

依賴

  • 下載 xpdf 二進制包 + 中文補丁包 (含字體配置),按 README 部署。

核心代碼

String cmd = "C:/Program Files/xpdf/pdftotext.exe -enc UTF-8 -q a.pdf -";
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) sb.append(line).append('\n');
br.close();
p.waitFor();
String text = sb.toString();

優缺點

  • ✅ 中文提取效果最佳 (經補丁包);處理速度快;無需 Java 庫依賴。
  • ❌ 平台相關 (需為每種 OS 準備二進制);進程啟動開銷大,不適合高併發;需處理路徑、權限、編碼問題。

綜合對比與選型建議

維度JacobPOIPDFBoxXpdf
平台僅 Windows跨平台跨平台跨平台(需各平台二進制)
Office 依賴需安裝 Word無無無
.doc 支援完美良好不支援不支援
.docx 支援完美良好不支援不支援
PDF 支援需 Word 開啟不支援良好(中文弱)優秀(中文強)
併發適合度極低中 (大文件記憶體壓力)中低 (進程開銷)
部署複雜度高低低中 (補丁包配置)

推薦組合策略

  • 服務端批量轉文本 (Linux):.doc/.docx → POI;PDF → Xpdf (pdftotext) (配中文補丁) 或 PDFBox (若中文需求低)。
  • Windows 客戶端/單機工具:可用 Jacob 獲得最高保真度。
  • 高併發在線預覽:預先異步轉換為純文本/HTML 存儲,前端直接讀取,避免實時解析阻塞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved