Как читать двоичные данные Microsoft Word из базы данных и преобразовывать их в читаемый текст

Я работаю в java-приложении под названием Mirth, где мне нужно прочитать сохраненный текстовый документ, который сохраняется в таблице базы данных в формате двоичных данных Microsoft Word. В настоящее время я могу извлекать данные из столбца в своем Java-приложении, но мне нужно преобразовать их в читаемый текст или формат XML или HTML.

В Интернете есть вызов java-библиотеки Aspose.words, но я не могу найти никаких методов, которые могли бы читать эти двоичные данные и преобразовывать их во что-то читаемое. Кто-нибудь использовал Aspose.words раньше для выполнения такой задачи или у кого-нибудь есть альтернативное решение?


person user3498953    schedule 30.04.2015    source источник


Ответы (1)


Загрузить документ из базы данных

Вы можете загрузить документ Word с помощью ByteArrayInputStream, если он находится в таблице базы данных. См. http://www.aspose.com/docs/display/wordsjava/How+to++Load+and+Save+a+Document+to+Database, чтобы найти статью, объясняющую сохранение и чтение документа Word в/ из базы данных. Я скопировал соответствующий код оттуда.

public static Document readFromDatabase(String fileName) throws Exception
{
    // Create the SQL command.
    String commandString = "SELECT * FROM Documents WHERE FileName='" + fileName + "'";

    // Retrieve the results from the database.
    ResultSet resultSet = executeQuery(commandString);

    // Check there was a matching record found from the database and throw an exception if no record was found.
    if(!resultSet.isBeforeFirst())
        throw new IllegalArgumentException(MessageFormat.format("Could not find any record matching the document \"{0}\" in the database.", fileName));

    // Move to the first record.
    resultSet.next();

    // The document is stored in byte form in the FileContent column.
    // Retrieve these bytes of the first matching record to a new buffer.
    byte[] buffer = resultSet.getBytes("FileContent");

    // Wrap the bytes from the buffer into a new ByteArrayInputStream object.
    ByteArrayInputStream newStream = new ByteArrayInputStream(buffer);

    // Read the document from the input stream.
    Document doc = new Document(newStream);

    // Return the retrieved document.
    return doc;

}

Читать текст

После загрузки файла вы можете прочитать его абзацы, таблицы, изображения и т. д. с помощью DOM. См. соответствующую документацию по адресу http://www.aspose.com/docs/display/wordsjava/Programming+with+Documents..

Но если вы просто хотите получить весь текст из документа, вы можете легко сделать это, вызвав метод toString(), как показано ниже.

System.out.println(doc.toString(SaveFormat.TEXT));

Я работаю с Aspose в качестве разработчика-евангелиста.

person Saqib Razzaq    schedule 30.04.2015
comment
Спасибо за это, ошибка, с которой я сталкиваюсь, заключается в том, что я запрашиваю таблицу базы данных, в которой хранится документ в столбце, для которого задан тип данных изображения в SQL. Я получаю сообщение об ошибке java.sql.SQLException: Data Type Mismatch , когда я использую 'resultSet.getBytes(1)'. Я меняю getBytes на getBlob, и это заставило меня пройти эту ошибку. Но когда я пытаюсь получить данные в InputStream, я получаю эту ошибку. Конструктор Java для java.io.ByteArrayInputStream с аргументами javax.sql.rowset.serial.SerialBlob не найден. - person user3498953; 01.05.2015
comment
вы можете попробовать byte[] buffer = resultSet.getBlob(col-name).getBytes();? Он должен работать с типами BLOB-объектов. - person Saqib Razzaq; 02.05.2015
comment
Спасибо, я застрял на другом проекте. Я пытаюсь использовать упомянутый вами метод getBytes(), и теперь я получаю эту ошибку. НОМЕР СТРОК: 162 ДЕТАЛИ: не удается найти метод javax.sql.rowset.serial.SerialBlob.getBytes(). - person user3498953; 07.05.2015
comment
Просто обновление, я смог исправить это. getBytes() работал. После использования другого экземпляра данных в основной базе данных у меня больше не было ошибок. - person user3498953; 11.05.2015