我有這樣的方法來加載從數據庫中存儲爲二進制文件文件,然後用參數替換customxml部分。從數據庫加載二進制文件,並將其作爲openxml處理
不知何故,當我將字節轉換成MemoryStream然後處理它不起作用,我的自定義XML部分不會被替換。但是,如果我使用FileStream並從磁盤讀取相同的文件,那麼它完全取代!
MemoryStream有什麼問題?我不能將MemoryStream強制轉換爲FileStream或者創建Stream等的Instance。 任何建議?
private static Stream LoadContent(byte[] content, XmlDocument parameters)
{
//FileStream works perfectly
//Stream fileStream = new FileStream(@"C:\temp\test.docx", FileMode.Open);
Stream documentStream = new MemoryStream();
documentStream.Write(content, 0, content.Length);
//Processes word file, replace custom xml parts with parameters
using (WordprocessingDocument document = WordprocessingDocument.Open(documentStream, true))
{
MainDocumentPart mainPart = document.MainDocumentPart;
Stream partStream = mainPart.CustomXmlParts.First().GetStream();
using (XmlWriter xmlWriter = XmlWriter.Create(partStream, new XmlWriterSettings { CloseOutput = false }))
{
parameters.WriteTo(xmlWriter);
xmlWriter.Flush();
}
mainPart.Document.Save();
}
return documentStream;
}
我已經試過這兩個建議,位置沒有幫助,如果我使用文件流並從磁盤獲取文件,然後複製到內存不再工作再一件事情! – apprich 2011-05-22 22:33:48
好的,我的編輯中還有1條建議 – 2011-05-22 23:09:41
是的 - 你需要調用Document.Save(),然後Flush(),然後將位置設置爲0。 – 2011-05-28 19:50:17