标题中的Word合并字段在打印预览中丢失值

时间:2017-11-22 11:03:33

标签: c# asp.net ms-word

我有一个ASP WebForms应用程序,我使用包含合并字段的单词模板,用数据库中提取的数据替换它们。该应用程序运行良好,单词文档已导出,但在尝试打印文档时,标题中存在的其中一个合并字段将丢失其值并恢复为初始合并字段名称。这是必须从应用程序的代码修复的东西,还是这个单词设置问题。

非常感谢任何帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

我已经设法使用OpenXML Productivity Tool解决了这个问题。事实证明,你不能在标题中添加合并字段,所以我做的是把它放在文本框中。我忘了在最初的描述中提到那一部分。因此,文本元素深埋在开放的xml中。当我设法找到它并记录内部的内容时,我发现我插入了MERGEFIELD<> MERGEFORMAT。每当我尝试在此<>中插入我想要的值时,当我点击打印预览时它就会重置。所以根据有类似问题的人的建议,我所做的就是删除这个文本框并创建一个干净的文本框,我只输入“Test”。它需要在里面有一个字符串,以便open xml创建元素Text(instrTxt)。 在C#中我这样做了:

foreach (var hPart in firstDoc.MainDocumentPart.HeaderParts)
{
     foreach (var txt in hPart.Header.Descendants<Text>())
     {
         if(txt.Text == "Test")
         {
             txt.Text = "My custom text";
         }
      }
}

因此对于每个标题部分(因为我无法确定它是哪一个......它甚至可以是多个),得到所有类型文本的后代。 我得到了比我想要的更多的东西。我也有一些包含页码(因为我也在页眉中)。所以我添加了一个if来检查它是否是我想要的文本元素。一旦我找到它,我添加了我想要的文本。

长话短说,我只是使用了一个文本,而不是在标题中使用合并字段。也许这不是最有效的方法。也许问题仍然存在,(如果我可以在标题中插入一个合并字段并实际上使其工作而没有在打印预览时重置值?idk),但这对我有用。