EditableRangeStart

EditableRangeStart class

表示 Word 文档中可编辑范围的开始。

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

public sealed class EditableRangeStart : Node

特性

姓名描述
CustomNodeId { get; set; }指定自定义节点标识符。
virtual Document { get; }获取该节点所属的文档。
EditableRange { get; }获取封装此可编辑范围开始和结束的外观对象。
Id { get; set; }指定可编辑范围的标识符。
virtual IsComposite { get; }返回真的如果该节点可以包含其他节点.
NextSibling { get; }获取紧随该节点的下一个节点。
override NodeType { get; }返回EditableRangeStart.
ParentNode { get; }获取此节点的直接父节点。
PreviousSibling { get; }获取紧邻此节点之前的节点。
Range { get; }返回一个Range表示此节点中包含的文档部分的对象。

方法

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

评论

Word 文档中完整的可编辑范围由EditableRangeStart 和一个匹配的EditableRangeEnd具有相同的 ID。

EditableRangeStartEditableRangeEnd只是 document 内的标记,指定可编辑范围的开始和结束位置。

使用EditableRange类作为“外观”,将可编辑的 range 作为单个对象使用。

当前仅在内联级别支持可编辑范围,即内部Paragraph, 但可编辑范围开始和可编辑范围结束可以位于不同的段落中。

例子

展示如何将可编辑范围的编辑权限限制为特定组/用户。

public void Visitor()
{
    Document doc = new Document();
    doc.Protect(ProtectionType.ReadOnly, "MyPassword");

    DocumentBuilder builder = new DocumentBuilder(doc);
    builder.Writeln("Hello world! Since we have set the document's protection level to read-only," +
                    " we cannot edit this paragraph without the password.");

    // 当我们对文档进行写保护时,可编辑范围允许我们选择用户可以编辑的特定区域。
    // 有两种互斥的方法来缩小允许的编辑器列表的范围。
    // 1 - 指定用户:
    EditableRange editableRange = builder.StartEditableRange().EditableRange;
    editableRange.SingleUser = "john.doe@myoffice.com";
    builder.Writeln($"This paragraph is inside the first editable range, can only be edited by {editableRange.SingleUser}.");
    builder.EndEditableRange();

    Assert.AreEqual(EditorType.Unspecified, editableRange.EditorGroup);

    // 2 - 指定允许用户关联的组:
    editableRange = builder.StartEditableRange().EditableRange;
    editableRange.EditorGroup = EditorType.Administrators;
    builder.Writeln($"This paragraph is inside the first editable range, can only be edited by {editableRange.EditorGroup}.");
    builder.EndEditableRange();

    Assert.AreEqual(string.Empty, editableRange.SingleUser);

    builder.Writeln("This paragraph is outside the editable range, and cannot be edited by anybody.");

    // 打印文档中每个可编辑范围的详细信息和内容。
    EditableRangePrinter editableRangePrinter = new EditableRangePrinter();

    doc.Accept(editableRangePrinter);

    Console.WriteLine(editableRangePrinter.ToText());
}

/// <summary>
/// 收集字符串中访问过的可编辑范围的属性和内容。
/// </summary>
public class EditableRangePrinter : DocumentVisitor
{
    public EditableRangePrinter()
    {
        mBuilder = new StringBuilder();
    }

    public string ToText()
    {
        return mBuilder.ToString();
    }

    public void Reset()
    {
        mBuilder.Clear();
        mInsideEditableRange = false;
    }

    /// <summary>
    /// 在文档中遇到 EditableRangeStart 节点时调用。
    /// </summary>
    public override VisitorAction VisitEditableRangeStart(EditableRangeStart editableRangeStart)
    {
        mBuilder.AppendLine(" -- Editable range found! -- ");
        mBuilder.AppendLine("\tID:\t\t" + editableRangeStart.Id);
        if (editableRangeStart.EditableRange.SingleUser == string.Empty)
            mBuilder.AppendLine("\tGroup:\t" + editableRangeStart.EditableRange.EditorGroup);
        else
            mBuilder.AppendLine("\tUser:\t" + editableRangeStart.EditableRange.SingleUser);
        mBuilder.AppendLine("\tContents:");

        mInsideEditableRange = true;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 在文档中遇到 EditableRangeEnd 节点时调用。
    /// </summary>
    public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd)
    {
        mBuilder.AppendLine(" -- End of editable range --\n");

        mInsideEditableRange = false;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// 在文档中遇到 Run 节点时调用。该访问者仅记录可编辑范围内的运行。
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        if (mInsideEditableRange) mBuilder.AppendLine("\t\"" + run.Text + "\"");

        return VisitorAction.Continue;
    }

    private bool mInsideEditableRange;
    private readonly StringBuilder mBuilder;
}

也可以看看