官方论坛
官方论坛的解决方案:
static void Main(string[] args)
{
Document doc = new Document();
doc.LoadFromFile("目录.docx");
foreach (Section section in doc.Sections)
{
//遍历body下面所有对象
foreach (DocumentObject obj in section.Body.ChildObjects)
{
if (obj is Paragraph)
{
Paragraph para = obj as Paragraph;
//通过样式名来确定是否是目录文本
switch(para.StyleName){
//一级标题
case "TOC1":
ChangeFont(para, "黑体", 14);
break;
//二级标题
case "TOC2":
ChangeFont(para, "黑体", 12);
break;
//三级标题
case "TOC3":
ChangeFont(para, "黑体", 10);
break;
//其余级别类推
}
}
}
}
doc.SaveToFile("结果.docx", FileFormat.Docx);
}
public static void ChangeFont(Paragraph para, string fontName, int fontSize)
{
foreach (DocumentObject obj in para.ChildObjects)
{
//如果对象类型为TextRange
if (obj.DocumentObjectType == DocumentObjectType.TextRange)
{
TextRange tr = (TextRange)obj;
//更改字体和文字大小
tr.CharacterFormat.FontName = fontName;
tr.CharacterFormat.FontSize = fontSize;
}
}
}
但是我发现这样不行,稍微改了一下:
static void Main(string[] args)
{
Document doc = new Document();
doc.LoadFromFile("目录.docx");
foreach (Section section in doc.Sections)
{
//遍历body下面所有对象
foreach (DocumentObject obj in section.Body.ChildObjects)
{
if (obj is Paragraph)
{
Paragraph para = obj as Paragraph;
for (DocumentObject tr : (Iterable<? extends DocumentObject>) para.getChildObjects()) {
if (tr.getDocumentObjectType() == DocumentObjectType.TOC || tr.getDocumentObjectType() == DocumentObjectType.Field) {
ChangeFont(para,"黑体",14);
}
}
}
}
doc.SaveToFile("结果.docx", FileFormat.Docx);
}
public static void ChangeFont(Paragraph para, string fontName, int fontSize)
{
foreach (DocumentObject obj in para.ChildObjects)
{
//如果对象类型为TextRange
if (obj.DocumentObjectType == DocumentObjectType.TextRange)
{
TextRange tr = (TextRange)obj;
//更改字体和文字大小
tr.CharacterFormat.FontName = fontName;
tr.CharacterFormat.FontSize = fontSize;
}
}
}