org.docx4j.openpackaging.packages.WordprocessingMLPackageインスタンスをByteArrayInputStreamに保存する方法は、サーバーからダウンロードすることができます。WordprocessingMLPackageをByteArrayInputStreamに保存します。
ありがとうございました。
org.docx4j.openpackaging.packages.WordprocessingMLPackageインスタンスをByteArrayInputStreamに保存する方法は、サーバーからダウンロードすることができます。WordprocessingMLPackageをByteArrayInputStreamに保存します。
ありがとうございました。
ByteArrayInputStream
に保存することはできません。 ByteArrayInputStream
はInputStream
であり、InputStream
には書き込みできません。
ByteArrayOutputStream
に何かを書き込んで、バイト配列を取得し、配列のByteArrayInputStream
ラッパーを作成することができます。
(私はのOutputStreamまたはWriterにそれらのインスタンスのいずれかを保存する方法があることを仮定している...)
まあのみsave
方法、私の仮定が間違っていた、とWordprocessingMLPackage
年代File
に保存されます。 (誰かが柔軟なI/O APIを設計する方法に関するメモを得ていなかったと思います...)
しかし、ソースコード(here)は、あなた自身で実装する方法の手がかりを提供します。方法は以下の通りです:
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
クラスにはOutputStream
に書き込む代わりのsave
メソッドがあることに注意してください。
私は同じ問題を抱えていて、save()関数を変更しなくても簡単な方法を見つけました。ソースhereと私はいくつかの編集をした:WordMLPackage pの
とHttpServletResponseの応答:
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
String fileName = "MyDocument.docx";
response.setHeader("Content-disposition", "attachment;filename=${fileName}");
SaveToZipFile saver = new SaveToZipFile(p);
saver.save(response.getOutputStream());
import文:あなたが使用できる
import org.docx4j.openpackaging.io.*
3.1.0以降のバージョンsave(OutputStream outStream)
:
/**
* Save this pkg to an OutputStream in the usual zipped up format
* (Docx4J.FLAG_SAVE_ZIP_FILE)
*
* @since 3.1.0
*/
public void save(OutputStream outStream) throws Docx4JException {
save(outStream, Docx4J.FLAG_SAVE_ZIP_FILE);
}
最終的に生成されたdocxを一時フォルダに保存し、それをByteArに変換しますrayOutputStream、ありがとう。 – user200340
@ user200340どのように変換してくださいでしたか? –