2012-11-13 4 views

答えて

3

ByteArrayInputStreamに保存することはできません。 ByteArrayInputStreamInputStreamであり、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ではなくに保存し、それを微調整する必要があるように見えますFileOutputStreamSaveToZipFileクラスにはOutputStreamに書き込む代わりのsaveメソッドがあることに注意してください。

+0

最終的に生成されたdocxを一時フォルダに保存し、それをByteArに変換しますrayOutputStream、ありがとう。 – user200340

+0

@ user200340どのように変換してくださいでしたか? –

4

私は同じ問題を抱えていて、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.* 
1

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);      
    } 
関連する問題