2

以前の回答のおかげで、パスワードで保護されたWord2010ドキュメントを読むことができるようになりました。(.docから.docxに1つずつ翻訳する必要があります。1994年にさかのぼりますが、問題ありません。)

はじめに簡単な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つのパーツのリストが表示されますが、内容が見つからずにツリーをウォークスルーしました。

各ドキュメントは日付と内容のページで構成されていますが、ページが見つかりません。彼らはどこに住んでいますか?

4

1 に答える 1

3

メインドキュメントのコンテンツは、「/ word/document.xml」という名前の「メインドキュメント部分」にあります。

docx4jでそれを取得する通常の方法は次のとおりです。

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

しかし、あなたはあなたのアプローチも同様に機能することを期待するでしょう。

于 2012-09-09T11:40:28.650 に答える