मैं ब्राउज़र के लिए नीचे उड़ एक शब्द दस्तावेज़ है कि मैं पर बनाने स्ट्रीम करने में असमर्थ हूँ का उपयोग कर। मुझे लगातार माइक्रोसॉफ्ट वर्ड से एक संदेश मिल रहा है कि दस्तावेज़ दूषित है।स्ट्रीमिंग OpenXML SDK डब्ल्यू "भ्रष्ट" दस्तावेज़ में/ASP.NET परिणाम
जब मैं एक कंसोल आवेदन के माध्यम से कोड को चलाने और ASP.NET तस्वीर से बाहर ले, दस्तावेज़ सही ढंग से कोई समस्या नहीं के साथ उत्पन्न होता है। मेरा मानना है कि सबकुछ फाइल लिखने के आसपास केंद्रित है। - लेकिन कुछ भी काफी काम करता है
using (MemoryStream mem = new MemoryStream())
{
// Create Document
using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(mem,
WordprocessingDocumentType.Document, true))
{
// Add a main document part.
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
Body body = mainPart.Document.Body;
body.Append(new Paragraph(
new Run(
new Text("Hello World!"))));
mainPart.Document.Save();
// Stream it down to the browser
// THIS IS PROBABLY THE CRUX OF THE MATTER <---
Response.AppendHeader("Content-Disposition", "attachment;filename=HelloWorld.docx");
Response.ContentType = "application/vnd.ms-word.document";
mem.WriteTo(Response.OutputStream);
Response.End();
}
}
मैं links का एक बहुत पर looked है:
यहाँ मेरी कोड है। मैं बहुत से लोग MemoryStream.WriteTo का उपयोग करते हैं और कुछ बाइनरीवाइट का उपयोग करते हैं - इस बिंदु पर मुझे यकीन नहीं है कि सही तरीका क्या है। इसके अलावा, मैं लंबे समय तक सामग्री प्रकार है, यानी आवेदन/vnd.openxmlformats-officedocument.wordprocessingml.document लेकिन कोई किस्मत की कोशिश की है।
कुछ स्क्रीनशॉट - भले ही आप आप जो लोग इस प्रश्न पर ठोकर के लिए एक ही "भागों गुम या अमान्य कर रहे हैं"
समाधान मिलता है ठीक करने के लिए प्रयास करें:
का उपयोग कर के भीतर() .. WordProcessingDocument के निर्देश, आप कॉल करना होगा:
wordDocument.Save();
भी सही ढंग से MemoryStream स्ट्रीम करने के लिए, बाहरी का उपयोग कर ब्लॉक में इस का उपयोग करें:
Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
Response.AppendHeader("Content-Disposition", "attachment;filename=HelloWorld.docx");
mem.Position = 0;
mem.CopyTo(Response.OutputStream);
Response.Flush();
Response.End();
आप कैसे एक wordDocument.Save जोड़ सकता हूँ(); ? मैंने कोशिश की और इसके करीब एकमात्र संभावित कोड है।() और यह मेरे लिए काम नहीं करता है। – RicL
अपने प्रश्न और उत्तर के लिए kd7 धन्यवाद। –