OpenOffice,将文档写入 servlet 响应

Posted

技术标签:

【中文标题】OpenOffice,将文档写入 servlet 响应【英文标题】:OpenOffice, writing a document to a servlet response 【发布时间】:2010-06-22 22:28:15 【问题描述】:

目前,我们使用 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);

我们想直接将文件写入 servlet 响应输出流,有人知道通过 Java 中的 OpenOffice 的 UNO api 直接将文档作为字节数组或输入流获取的方法吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

执行此操作需要哪些依赖项(jar)?【参考方案2】:

对于 10 年后遇到这种情况的任何人,我必须包装输出流以使其正常工作

PropertyValue[] properties = new PropertyValue[2];
properties[0] = new PropertyValue();
properties[0].Name = "FilterName";
properties[0].Value = "writer_pdf_Export";
properties[1] = new PropertyValue();
properties[1].Name = "OutputStream";
properties[1].Value = new OutputStreamToXOutputStreamAdapter(outputStream);
storable.storeAsURL("private:stream", properties);

没有这个我一直遇到com.sun.star.lang.DisposedException

【讨论】:

【参考方案3】:

我建议先在本地保存文件(来自 UNO API),然后在删除 [temp] 文件之前从您的 java 代码中流式传输结果。这样做的原因是您可以将 OpenOffice 生成文档的问题与交付给客户的问题分开。例如,如果您的文档无法生成,您可以生成错误,而无需担心流向客户端的部分写入响应。此外,如果您还没有看过工具,您可能想看看Docmosis,它提供了冗余、性能优化和数据合并功能。它可以直接渲染到您提供的流(并且可能会处理部分流式结果问题)。

【讨论】:

以上是关于OpenOffice,将文档写入 servlet 响应的主要内容,如果未能解决你的问题,请参考以下文章

从 LibreOffice 5 读取/写入 OpenOffice 图像标题和描述

如何使用 OpenOffice API 将 HTML 文本放入 OpenOffice 文档

使用 PHP + Openoffice 将文档转为 PDF

如何将复选框导出到 OpenOffice 中的 .doc 文档?

百度文库的实现——java利用openoffice,word转pdf

将 HTML 文本插入 OpenOffice 文档 (.odt) 文件