如何将 org.docx4j.openpackaging.packages.WordprocessingMLPackage 实例保存到 ByteArrayInputStream 中,然后可以从服务器下载它。
Thanks.
您无法保存到ByteArrayInputStream
... 曾经。 AByteArrayInputStream
is an InputStream
并且你不/不能写信给InputStream
.
但是你可以写一些东西到ByteArrayOutputStream
,获取字节数组,并创建一个ByteArrayInputStream
数组的包装器。
(我假设有一种方法可以将这些实例之一保存到 OutputStream 或 Writer ...)
嗯,我的假设是错误的,而且WordprocessingMLPackage
's only save
方法保存到File
。 (我猜有人没有得到关于如何设计灵活的 I/O api 的备忘录......)
但是源代码(here http://www.jarvana.com/jarvana/view/org/docx4j/docx4j/2.7.1/docx4j-2.7.1-sources.jar!/org/docx4j/openpackaging/packages/WordprocessingMLPackage.java?format=ok)提供了一些关于如何自己实现它的线索。方法如下:
public void save(java.io.File docxFile) throws Docx4JException {
if (docxFile.getName().endsWith(".xml")) {
// Create a org.docx4j.wml.Package object
FlatOpcXmlCreator worker = new FlatOpcXmlCreator(this);
org.docx4j.xmlPackage.Package pkg = worker.get();
// Now marshall it
JAXBContext jc = Context.jcXmlPackage;
try {
Marshaller marshaller=jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
NamespacePrefixMapperUtils.setProperty(marshaller,
NamespacePrefixMapperUtils.getPrefixMapper());
marshaller.marshal(pkg, new FileOutputStream(docxFile));
} catch (Exception e) {
throw new Docx4JException("Error saving Flat OPC XML", e);
}
return;
}
SaveToZipFile saver = new SaveToZipFile(this);
saver.save(docxFile);
}
看起来您应该能够在帮助程序类中复制此代码,并调整它以保存到OutputStream
而不是(具体地)FileOutputStream
。请注意,SaveToZipFile
班级有替代方案save
写入的方法OutputStream
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)