2012-09-08 98 views
2

感謝previous answer,我現在可以閱讀受密碼保護的Word 2010文檔。 (我要他們一個個從.DOC爲.docx他們回到1994年翻譯,不過沒關係。)使用docx4j解析Word文檔中的內容

我寫了一個簡單的Java類上手:

package model.docx4j; 

import model.JournalEntry; 
import model.JournalEntryFactory; 
import org.docx4j.openpackaging.exceptions.Docx4JException; 
import org.docx4j.openpackaging.packages.OpcPackage; 
import org.docx4j.openpackaging.parts.Parts; 

import java.io.IOException; 
import java.io.InputStream; 
import java.security.GeneralSecurityException; 
import java.util.LinkedList; 
import java.util.List; 

/** 
* JournalEntryFactoryImpl using docx4j 
* @author Michael 
* @link 
* @since 9/8/12 12:44 PM 
*/ 
public class JournalEntryFactoryImpl implements JournalEntryFactory { 
    @Override 
    public List<JournalEntry> getEntries(InputStream inputStream, String password) throws IOException, GeneralSecurityException { 
     List<JournalEntry> journalEntries = new LinkedList<JournalEntry>(); 
     if (inputStream != null) { 
      try { 
       OpcPackage opcPackage = OpcPackage.load(inputStream, password); 
       Parts parts = opcPackage.getParts(); 
      } catch (Docx4JException e) { 
       LOGGER.error("Could not load document into docx4j", e); 
       throw new IOException(e); 
      } 
     } 
     return journalEntries; 
    } 
} 

而且一JUnit測試來驅動它:

package model.docx4j; 

import model.JournalEntry; 
import model.JournalEntryFactory; 
import org.docx4j.openpackaging.exceptions.Docx4JException; 
import org.docx4j.openpackaging.packages.OpcPackage; 
import org.docx4j.openpackaging.parts.Parts; 

import java.io.IOException; 
import java.io.InputStream; 
import java.security.GeneralSecurityException; 
import java.util.LinkedList; 
import java.util.List; 

/** 
* JournalEntryFactoryImpl using docx4j 
* @author Michael 
* @link 
* @since 9/8/12 12:44 PM 
*/ 
public class JournalEntryFactoryImpl implements JournalEntryFactory { 
    @Override 
    public List<JournalEntry> getEntries(InputStream inputStream, String password) throws IOException, GeneralSecurityException { 
     List<JournalEntry> journalEntries = new LinkedList<JournalEntry>(); 
     if (inputStream != null) { 
      try { 
       OpcPackage opcPackage = OpcPackage.load(inputStream, password); 
       Parts parts = opcPackage.getParts(); 
      } catch (Docx4JException e) { 
       LOGGER.error("Could not load document into docx4j", e); 
       throw new IOException(e); 
      } 
     } 
     return journalEntries; 
    } 
} 

我把一個斷點進入測試,看看有什麼docx4j在做,一旦閱讀我的文件。我看到了8個部分的列表,但是我沒有找到內容就走過樹。

每個文檔都包含一個帶有日期和內容的頁面,但我找不到頁面。他們住在哪裏?

回答

3

主要文檔內容位於「主文檔部分」中,該文檔通常被命名爲「/word/document.xml」。

的常用方法與docx4j得到它是:

WordprocessingMLPackage wordMLPackage = (WordprocessingMLPackage)opcPackage; 
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); 

但你會期望你的工作方式爲好。

+0

最後!我看到一個包含我的文本條目的文檔實例列表。非常感謝。我很欣賞圖書館和你的答案。 – duffymo