SpecialChar

SpecialChar class

文档中特殊字符的基类。

要了解更多信息,请访问Aspose.Words 文档对象模型(DOM)文档文章。

public class SpecialChar : Inline

特性

姓名描述
CustomNodeId { get; set; }指定自定义节点标识符。
virtual Document { get; }获取此节点所属的文档。
Font { get; }提供对此对象的字体格式的访问。
virtual IsComposite { get; }返回真的如果此节点可以包含其他节点。
IsDeleteRevision { get; }如果在启用更改跟踪的情况下在 Microsoft Word 中删除了此对象,则返回 true。
IsFormatRevision { get; }如果在启用更改跟踪的情况下 Microsoft Word 中的对象格式发生更改,则返回 true。
IsInsertRevision { get; }如果在启用更改跟踪的情况下将此对象插入 Microsoft Word,则返回 true。
IsMoveFromRevision { get; }返回真的如果在启用更改跟踪的情况下在 Microsoft Word 中移动(删除)此对象。
IsMoveToRevision { get; }返回真的如果在启用更改跟踪的情况下在 Microsoft Word 中移动(插入)此对象。
NextSibling { get; }获取紧随此节点之后的节点。
override NodeType { get; }返回SpecialChar.
ParentNode { get; }获取此节点的直接父节点。
ParentParagraph { get; }检索父级Paragraph此节点的。
PreviousSibling { get; }获取此节点前一个节点。
Range { get; }返回Range表示此节点中包含的文档部分的对象。

方法

姓名描述
override Accept(DocumentVisitor)接受访客。
Clone(bool)创建节点的副本。
GetAncestor(NodeType)获取指定的第一个祖先NodeType.
GetAncestor(Type)获取指定对象类型的第一个祖先。
override GetText()获取此节点代表的特殊字符。
NextPreOrder(Node)根据前序树遍历算法获取下一个节点。
PreviousPreOrder(Node)根据前序树遍历算法获取前一个节点。
Remove()将自身从父级中移除。
ToString(SaveFormat)将节点的内容导出为指定格式的字符串。
ToString(SaveOptions)使用指定的保存选项将节点内容导出为字符串。

评论

Microsoft Word 文档可以包含许多特殊字符,这些字符代表字段、表单字段、形状、OLE 对象、脚注等。有关特殊字符列表,请参阅ControlChar

SpecialChar是内联节点,并且只能是Paragraph

SpecialCharchar 用作更具体的类的基类 ,这些类表示 Aspose.Words 提供编程访问的特殊字符。 SpecialChar该类本身也用于表示特殊字符 which Aspose.Words 不提供详细的编程访问。

例子

展示如何使用 DocumentVisitor 实现从文档中删除所有隐藏内容。

public void RemoveHiddenContentFromDocument()
{
    Document doc = new Document(MyDir + "Hidden content.docx");
    RemoveHiddenContentVisitor hiddenContentRemover = new RemoveHiddenContentVisitor();

    // 以下是三种可以接受文档访问者的字段类型,
    // 这将允许它访问接受节点,然后以深度优先的方式遍历其子节点。
    // 1 - 段落节点:
    Paragraph para = (Paragraph)doc.GetChild(NodeType.Paragraph, 4, true);
    para.Accept(hiddenContentRemover);

    // 2 - 表节点:
    Table table = doc.FirstSection.Body.Tables[0];
    table.Accept(hiddenContentRemover);

    // 3 - 文档节点:
    doc.Accept(hiddenContentRemover);

    doc.Save(ArtifactsDir + "Font.RemoveHiddenContentFromDocument.docx");
}

/// <summary>
/// 删除所有标记为“隐藏内容”的访问节点。
/// </summary>
public class RemoveHiddenContentVisitor : DocumentVisitor
{
    /// <summary>
    /// 当在文档中遇到 FieldStart 节点时调用。
    /// </summary>
    public override VisitorAction VisitFieldStart(FieldStart fieldStart)
    {
        if (fieldStart.Font.Hidden)
            fieldStart.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到 FieldEnd 节点时调用。
    /// </summary>
    public override VisitorAction VisitFieldEnd(FieldEnd fieldEnd)
    {
        if (fieldEnd.Font.Hidden)
            fieldEnd.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到 FieldSeparator 节点时调用。
    /// </summary>
    public override VisitorAction VisitFieldSeparator(FieldSeparator fieldSeparator)
    {
        if (fieldSeparator.Font.Hidden)
            fieldSeparator.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 在文档中遇到 Run 节点时调用。
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        if (run.Font.Hidden)
            run.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到段落节点时调用。
    /// </summary>
    public override VisitorAction VisitParagraphStart(Paragraph paragraph)
    {
        if (paragraph.ParagraphBreakFont.Hidden)
            paragraph.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到 FormField 时调用。
    /// </summary>
    public override VisitorAction VisitFormField(FormField formField)
    {
        if (formField.Font.Hidden)
            formField.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到 GroupShape 时调用。
    /// </summary>
    public override VisitorAction VisitGroupShapeStart(GroupShape groupShape)
    {
        if (groupShape.Font.Hidden)
            groupShape.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到形状时调用。
    /// </summary>
    public override VisitorAction VisitShapeStart(Shape shape)
    {
        if (shape.Font.Hidden)
            shape.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到评论时调用。
    /// </summary>
    public override VisitorAction VisitCommentStart(Comment comment)
    {
        if (comment.Font.Hidden)
            comment.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到脚注时调用。
    /// </summary>
    public override VisitorAction VisitFootnoteStart(Footnote footnote)
    {
        if (footnote.Font.Hidden)
            footnote.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当在文档中遇到特殊字符时调用。
    /// </summary>
    public override VisitorAction VisitSpecialChar(SpecialChar specialChar)
    {
        Console.WriteLine(specialChar.GetText());

        if (specialChar.Font.Hidden)
            specialChar.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当文档中某个表节点的访问结束时调用。
    /// </summary>
    public override VisitorAction VisitTableEnd(Table table)
    {
        // 表格单元格内的内容可能有隐藏内容标志,但表格本身不能。
        // 如果此表只有隐藏内容,则该访问者会将其全部删除,
        // 并且不会剩下任何子节点。
        // 因此,我们也可以将表格本身视为隐藏内容并将其删除。
        // 空的表格但没有隐藏内容,其单元格内会有空的段落,
        // 该访问者不会删除它。
        if (!table.HasChildNodes)
            table.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当文档中某个 Cell 节点的访问结束时调用。
    /// </summary>
    public override VisitorAction VisitCellEnd(Cell cell)
    {
        if (!cell.HasChildNodes && cell.ParentNode != null)
            cell.Remove();

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 当文档中某一行节点的访问结束时调用。
    /// </summary>
    public override VisitorAction VisitRowEnd(Row row)
    {
        if (!row.HasChildNodes && row.ParentNode != null)
            row.Remove();

        return VisitorAction.Continue;
    }
}

也可以看看