2012-11-13 5 views
5

पर सहेजें Ig.docx4j.openpackaging.packages.WordprocessingMLPackage उदाहरण को ByteArrayInputStream में कैसे सहेज सकता है, फिर इसे सर्वर से डाउनलोड किया जा सकता है।WordprocessingMLPackage को ByteArrayInputStream

धन्यवाद।

उत्तर

3

आप कभी भी ByteArrayInputStream पर सहेज नहीं सकते हैं। ByteArrayInputStream एक InputStream है और आप InputStream पर नहीं लिखते/नहीं लिख सकते हैं।

हालांकि आप ByteArrayOutputStream पर कुछ लिख सकते हैं, बाइट सरणी प्राप्त करें, और सरणी के लिए ByteArrayInputStream रैपर बनाएं।

(मैं यह सोचते हैं रहा हूँ एक OutputStream या लेखक के लिए उन उदाहरणों में से एक को बचाने के लिए एक रास्ता है कि वहाँ ...)


खैर, मेरी धारणा गलत था, और WordprocessingMLPackage 'केवल save विधि रों File पर बचाता है। (मुझे लगता है कि किसी को कैसे लचीला मैं/हे apis डिजाइन करने के लिए पर ज्ञापन नहीं मिला ...)

लेकिन स्रोत कोड (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); 
} 

ऐसा लगता है कि आप एक सहायक कक्षा में इस कोड को कॉपी करने के लिए सक्षम होना चाहिए, और यह करने के बजाय (विशेष रूप से) एक FileOutputStream एक OutputStream को बचाने के लिए tweak: विधि इस प्रकार है। ध्यान दें कि SaveToZipFile कक्षा में save विधियां हैं जो OutputStream पर लिखती हैं।

+0

मैं जेनरेट किए गए डॉक्क्स को अस्थायी फ़ोल्डर में सहेजता हूं, और इसे बाइटएर में परिवर्तित करता हूं रेऑटपुटस्ट्रीम, धन्यवाद। – user200340

+0

@ user200340 कृपया कन्वर्ट करने के लिए आपने कैसे किया? –

4

मुझे एक ही समस्या थी और सहेजने() फ़ंक्शन को बदलने के बिना इसे करने का एक आसान तरीका मिला।

एक WordMLPackage पी के लिए और HttpServletResponse प्रतिक्रिया:: स्रोत here और मैं कुछ संपादन करने के

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 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);      
    } 
संबंधित मुद्दे

 संबंधित मुद्दे