OpenOffice, запись документа в ответ сервлета - PullRequest
2 голосов
/ 23 июня 2010

В настоящее время мы используем OpenOffice для захвата закладок в документе файла шаблона и замены их содержимым из нашей БД через Java. Строки кода, которые на самом деле сохраняют файл, выглядят так ...

  XStorable storable = UnoRuntime.queryInterface(XStorable.class, document);


        // Save as Word 97 Document
        PropertyValue[] properties = new PropertyValue[1];
        PropertyValue property = new PropertyValue();
        property.Name = "FilterName";
        property.Value = FORMAT_WORD_97;
        properties[0] = property;
        storable.storeAsURL(saveFileURL, properties);

Мы хотим напрямую записать файл в выходной поток ответа сервлета, кто-нибудь знает способ прямого получения документа в виде байтового массива или входного потока через UNO API OpenOffice в Java?

Ответы [ 2 ]

2 голосов
/ 23 июня 2010

Это зависит от реализации UNO API. Мы смогли сделать это с PDF,

    OutputStream os = response.getOutputStream();

    PropertyValue[] properties = new PropertyValue[2];
    PropertyValue property = new PropertyValue();
    property.Name = "FilterName";
    property.Value = FORMAT_WORD_97;
    properties[0] = property;
    PropertyValue streamProp = new PropertyValue();
    streamProp.Name = "OutputStream;
    streamProp.Value = os;
    properties[1] = streamProp;

    storable.storeAsURL("private:stream", properties);
0 голосов
/ 23 июня 2010

Я бы предложил сначала сохранить файл локально (из API UNO), а затем передать результат из вашего кода Java перед удалением файла [temp]. Причина этого заключается в том, что вы можете отделить проблему с созданием документа OpenOffice от вашей доставки клиенту. Например, если ваш документ не удается сгенерировать, вы можете создать ошибку, не беспокоясь о частично написанном ответе, передаваемом клиенту. Кроме того, если вы еще не знакомы с инструментами, вы можете обратиться к Docmosis , который обеспечивает функции резервирования, оптимизации производительности и объединения данных. Он может отображаться непосредственно в поток, который вы предоставляете (и, по-видимому, решает проблему с частичным потоком результата).

...