【发布时间】:2018-10-19 14:08:14
【问题描述】:
一直在努力解决很多问题。在 ASP.NET Core 服务器上使用 OpenXML,我想基于模板创建一个新的 docx 文档。完全保存此文档后,我希望将其发送给我的客户,以便他可以直接下载。这是我的代码:
public IActionResult Post([FromBody] Consultant consultant)
{
using (Stream templateStream = new MemoryStream(Properties.Resources.templateDossierTech))
using (WordprocessingDocument template =
WordprocessingDocument.Open(templateStream, false))
{
string fileName = environment.WebRootPath + @"\Resources\"+ consultant.FirstName + "_" + consultant.LastName + ".docx";
WordprocessingDocument dossierTechniqueDocument =
WordprocessingDocument.Create(fileName,
WordprocessingDocumentType.Document);
foreach (var part in template.Parts)
{
dossierTechniqueDocument.AddPart(part.OpenXmlPart, part.RelationshipId);
}
var body = dossierTechniqueDocument.MainDocumentPart.Document.Body;
var paras = body.Elements();
foreach (var para in paras)
{
foreach (var run in para.Elements())
{
foreach (var text in run.Elements())
{
if (text.InnerText.Contains("{{prenom}}"))
{
var t = new Text(text.InnerText.Replace("{{prenom}}", consultant.FirstName));
run.RemoveAllChildren<Text>();
run.AppendChild(t);
}
}
}
}
dossierTechniqueDocument.MainDocumentPart.Document.Save();
dossierTechniqueDocument.Close();
var cd = new System.Net.Mime.ContentDisposition
{
FileName = consultant.FirstName + "_" + consultant.LastName + ".docx",
Inline = true
};
Response.Headers.Add("Content-Disposition", cd.ToString());
Response.Headers.Add("X-Content-Type-Options", "nosniff");
return File(System.IO.File.ReadAllBytes(fileName),"application/vnd.openxmlformats-officedocument.wordprocessingml.document","Dossier Technique");
}
}
乍一看,它看起来保存得很好,但是当我尝试在 word 上打开它时,它说它由于某种原因已损坏。 当我尝试发送它时,这是同样的问题。一旦发送,我的客户端就不会下载它(Ajax 查询)。 你们中有人知道如何解决它吗?
【问题讨论】:
-
不清楚你希望代码做什么......你为什么不简单地复制“模板”文件然后编辑副本?另外,这个模板文件有什么*文件扩展名?解决这个问题对我们来说几乎是不可能的,因为我们没有原始文件或你的整个解决方案。如果你不想复制文件,我的建议是是使用 Open XML SDK Productivity Tool 的“比较”功能将原始代码与代码结果进行比较,以找出问题所在(两者有何不同)。
-
但这就是我正在做的事情@CindyMeister。我正在将模板的内容复制到 dossierTechniqueDocument (都是.docx)
-
不,这不是我的建议:在使用 Open XML SDK 打开它进行编辑之前复制 文件。您认为您正在复制“模板”,但出了点问题。我怀疑这可能与
dossierTechniqueDocument.AddPart(part.OpenXmlPart, part.RelationshipId);行有关 - 关系有问题...
标签: c# .net-core openxml docx openxml-sdk