gpt4 book ai didi

c# - 是否可以将 packaging.package 写入流而不必先将其保存到文件中?

转载 作者:行者123 更新时间:2023-11-30 13:03:52 32 4
gpt4 key购买 nike

我在内存中有一个 System.IO.Packaging.Package(它是一个 WordprocessingDocument)并且想将它流式传输到浏览器以保存它。 Word 文档已被基于 MVC 的应用程序修改,生成的文件已针对当前请求进行了修改。

我知道这个包是一个包含多个部分的“zip”文件。这些部分包括页眉、页脚和主体文件。我已经分别修改了每一个,现在想将包流式传输回用户。

我可以获得各个部分流... package.GetPart(new Uri("/word/document.xml", UriKind.Relative)).GetStream()

但是我不知道如何在不写入文件系统的情况下获取整个文档(包)的输出流。

提前致谢

不——我想我需要的是这样的东西……我已经阅读了模板文档并在内存中进行了修改。现在我想将修改后的文档(保持模板不变)流式传输回用户。

        MemoryStream stream = new MemoryStream();
WordprocessingDocument docOut =
WordprocessingDocument.Create( stream, WordprocessingDocumentType.Document);

foreach (var part in package.GetParts())
{
using (StreamReader streamReader = new StreamReader(part.GetStream()))
{
PackagePart newPart = docOut.Package.CreatePart(
part.Uri, part.ContentType );
using (StreamWriter streamWriter = new StreamWriter(newPart.GetStream(FileMode.Create)))
{
streamWriter.Write(streamReader.ReadToEnd());
}
}
}

不幸的是,这会产生一个“损坏”的 word 文档...

最佳答案

OpenXmlPackage.Close Method将所有部分的所有更改保存到基础存储中。如果您从流中打开包,只需使用该流:

public Stream packageStream() {
var ms = new MemoryStream();
var wrdPk = WordprocessingDocument.Create(ms, WordprocessingDocumentType.Document);
// Build the package ...
var docPart = wrdPk.AddMainDocumentPart();
docPart.Document = new Document(
new Body(new Paragraph(new Run(new Text("Hello world.")))));
// Flush all changes
wrdPk.Close();
return ms;
}

关于c# - 是否可以将 packaging.package 写入流而不必先将其保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11246536/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com