Создайте документ word из байтов в базе данных

#java #mysql #spring-boot #dynamic #ms-word

Вопрос:

Я разрабатываю веб-приложение spring boot (Java), которое автоматизирует создание документов. Одна из проблем, с которой я сталкиваюсь, заключается в том, что у меня есть шаблон документа word в базе данных, и когда пользователь хочет создать документ, я хочу создать новый документ, используя этот сохраненный шаблон. Итак, есть ли способ создать документ word из шаблона, байты которого хранятся в базе данных. Кроме того, я хочу сохранить этот документ обратно в базу данных, получив его байтами.

Любая помощь будет признательна.

Комментарии:

1. Возможно, в документе Word есть шаблон, который вы можете открыть из приложения Word, вы не можете использовать это приложение с загрузкой Spring. У вас есть какой-нибудь код к нему?

2. Спасибо за ответ. Прямо сейчас я делаю что-то вроде открытия шаблона, хранящегося в моем каталоге, и добавления значений в шаблон. Это создает файл в моем каталоге, который я затем открываю и загружаю в базу данных. Я использовал код с этого веб-сайта: c-sharpcorner.com/article/…

3. Поэтому запустите запрос и сохраните его в виде файла. В чем именно заключается проблема?

Ответ №1:

Согласно ссылке, которую вы разместили в комментарии, вы используете бесплатно spire.doc библиотека. Ты можешь:

  • Сначала преобразуйте байты в поток, вызовите метод Document.LoadFromStream, предоставляемый библиотекой, для загрузки шаблона из потока.
  • Во-вторых, после заполнения данных сохраните документ обратно в поток, используя метод Document.SaveToStream.
  • Наконец, преобразуйте поток в байты.

Ниже приведен пример (еще не протестировали его), вы можете попробовать.

     byte[] inputBytes = yourBytes;
    ByteArrayInputStream inputStream = new ByteArrayInputStream(inputBytes);
    Document document = new Document();
    document.loadFromStream(inputStream, FileFormat.Docx);

    //do something
    //......

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    document.saveToStream(outputStream, FileFormat.Docx_2013);
    byte[] outputBytes = outputStream.toByteArray();