使用Novacode的DocX,我可以添加一个带有Heading 1样式的段落,如下所示:
var p = docX.InsertParagraph("My Heading");
p.StyleName = "Heading1";
Run Code Online (Sandbox Code Playgroud)
但我无法添加"标题"样式:
var p = docX.InsertParagraph("My Heading");
p.StyleName = "Title";
Run Code Online (Sandbox Code Playgroud)
我查看了生成的Xml文件,我看到"标题"样式不在Styles.xml文件中,而如果我在Word中将其设置为标题样式并保存,则标题样式将出现在样式Xml文件中.
那么我如何让DocX包含Title样式,或者如何在DocX样式中添加样式?
我也遇到这个问题。通过比较 docx(zipped) 文件中的 word\document.xml 和 word\styles.xml 文件。我发现 Paragraph.StyleName 应该分配样式 id 而不是样式名称!
例如:styles.xml 中的一种样式:
<w:style w:type="paragraph" w:customStyle="1" w:styleId="a9">
<w:name w:val="mystyle" />
Run Code Online (Sandbox Code Playgroud)
您应该将“ a9 ”而不是“ mystyle ”分配给 Paragraph.StyleName 以获得正确的样式。
希望有帮助。
事实证明,有几种样式未在该库中实现。如果您查看 _Enumerations.cs 文件中的源代码,就会发现有一个名为 HeadingType 的枚举。在此枚举中,有一些注释,标题和其他几个未实现,因为它们与标题不同。看起来注释说您可以自己尝试,但这需要将 docx 的自定义构建包含在您的项目中。
我建议您找出字体特征并手动设置或在配置文件中设置它们。简单的例子。
static void AddTitle()
{
Console.WriteLine("\tAddTitle()");
using (var document = DocX.Create(@"docs\Title.docx"))
{
var title = document.InsertParagraph("this should be a title");
title.FontSize(28).Font(new FontFamily("Calibri Light"));
document.InsertParagraph("title is above!");
document.Save();
}
}
Run Code Online (Sandbox Code Playgroud)