首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenOffice,将文档写入servlet响应

OpenOffice,将文档写入servlet响应
EN

Stack Overflow用户
提问于 2010-06-23 06:28:16
回答 3查看 1.2K关注 0票数 2

目前,我们使用OpenOffice来抓取模板文件文档中的书签,并通过Java将它们替换为数据库中的内容。实际保存文件的代码行如下所示...

代码语言:javascript
复制
  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响应输出流,有谁知道通过OpenOffice的UNO api在Java中直接将文档作为字节数组或输入流的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-23 07:41:59

这取决于UNO API的实现。我们可以用PDF实现这一点,

代码语言:javascript
复制
    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);
票数 2
EN

Stack Overflow用户

发布于 2021-02-25 06:27:25

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

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2010-06-23 15:01:44

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3097625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档