现在使用的Aspose.Words的版本是21.3
如何获取world文档中所有目录信息呢?或者是获取到world文档中目录结构的标题信息呢?
就是我在文档中设置了一级标题二级标题等属性,现在想在上传的时候读取到这些信息,构建目录索引
@Guilin 在您的情况下,您可以使用 DocumentVisitor 和 ParagraphFormat.StyleIdentifier 来获取标题段落。 例如看下面的简单代码和测试文档。
Document doc = new Document(@"C:\Temp\in.docx");
doc.Accept(new HeadingVisitor());
private class HeadingVisitor : DocumentVisitor
{
public override VisitorAction VisitParagraphStart(Paragraph paragraph)
{
string text = paragraph.ToString(SaveFormat.Text).Trim();
switch (paragraph.ParagraphFormat.StyleIdentifier)
{
case StyleIdentifier.Heading1:
Console.WriteLine(text);
break;
case StyleIdentifier.Heading2:
Console.WriteLine("\t{0}", text);
break;
case StyleIdentifier.Heading3:
Console.WriteLine("\t\t{0}", text);
break;
case StyleIdentifier.Heading4:
Console.WriteLine("\t\t\t{0}", text);
break;
}
return VisitorAction.Continue;
}
}
in.docx (12.7 KB)
@Guilin 您可以实现 VisitHeaderFooterStart
和 VisitHeaderFooterEnd
来检测页眉/页脚内容
private class HeadingVisitor : DocumentVisitor
{
public override VisitorAction VisitHeaderFooterStart(HeaderFooter headerFooter)
{
Console.WriteLine("Start {0}", headerFooter.HeaderFooterType);
return VisitorAction.Continue;
}
public override VisitorAction VisitHeaderFooterEnd(HeaderFooter headerFooter)
{
Console.WriteLine("End {0}", headerFooter.HeaderFooterType);
return VisitorAction.Continue;
}
public override VisitorAction VisitParagraphStart(Paragraph paragraph)
{
string text = paragraph.ToString(SaveFormat.Text).Trim();
switch (paragraph.ParagraphFormat.StyleIdentifier)
{
case StyleIdentifier.Heading1:
Console.WriteLine(text);
break;
case StyleIdentifier.Heading2:
Console.WriteLine("\t{0}", text);
break;
case StyleIdentifier.Heading3:
Console.WriteLine("\t\t{0}", text);
break;
case StyleIdentifier.Heading4:
Console.WriteLine("\t\t\t{0}", text);
break;
}
return VisitorAction.Continue;
}
}
image.png (28.8 KB)
image.png (1.6 KB)
image.png (36.6 KB)
读取到文档中“文号:法释〔2016〕25号“这个位置的时候, 按您所说的判断这个判断到的类型还是读取到的类型是 FooterPrimary,并没有区分开始页眉还是页脚呢
@Guilin 目前尚不清楚您的预期输出是什么。 你能详细说明一下你的要求吗?
提供的代码仅打印标题 1-3 段落,正如我所见,这与您附加的文档一样有效。
如果您还需要获得其他样式的段落,您可以在 switch 中添加额外的案例。