当前,我们使用OpenOffice在模板文件文档中获取书签,并通过Java中的DB中的内容替换它们。实际保存文件的代码行看起来像这样...

  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);

我们想将文件直接写入Servlet响应OutputStream,是否有人知道通过Java中的OpenOffice的UNO API直接将文档作为字节数组或InputStream直接获取的方法?

有帮助吗?

解决方案

这取决于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);

其他提示

我建议先保存本地文件(从UNO API),然后在删除[temp]文件之前从Java代码中流出结果。这样做的原因是,您可以通过OpenOffice将文档生成的问题与向客户分开。例如,如果您的文档未能生成,则可以产生错误,而不必担心将部分书面响应流到客户端。另外,如果您尚未查看工具,您可能想看看 DOCMOSIS 提供冗余,性能优化和数据合并功能。它可以直接渲染到您提供的流(大概可以照顾部分流质问题)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top