EditableRangeStart

EditableRangeStart class

Representa el inicio de un rango editable en un documento de Word.

Para obtener más información, visite elModelo de objetos de documento (DOM) de Aspose.Words artículo de documentación.

public sealed class EditableRangeStart : Node

Propiedades

NombreDescripción
CustomNodeId { get; set; }Especifica el identificador de nodo personalizado.
virtual Document { get; }Obtiene el documento al que pertenece este nodo.
EditableRange { get; }Obtiene el objeto de fachada que encapsula el inicio y el final de este rango editable.
Id { get; set; }Especifica el identificador del rango editable.
virtual IsComposite { get; }Devolucionesverdadero si este nodo puede contener otros nodos.
NextSibling { get; }Obtiene el nodo que sigue inmediatamente a este nodo.
override NodeType { get; }DevolucionesEditableRangeStart .
ParentNode { get; }Obtiene el padre inmediato de este nodo.
PreviousSibling { get; }Obtiene el nodo inmediatamente anterior a este nodo.
Range { get; }Devuelve unRange objeto que representa la parte de un documento contenido en este nodo.

Métodos

NombreDescripción
override Accept(DocumentVisitor)Acepta un visitante.
Clone(bool)Crea un duplicado del nodo.
GetAncestor(NodeType)Obtiene el primer ancestro del especificadoNodeType .
GetAncestor(Type)Obtiene el primer antepasado del tipo de objeto especificado.
virtual GetText()Obtiene el texto de este nodo y de todos sus hijos.
NextPreOrder(Node)Obtiene el siguiente nodo según el algoritmo transversal del árbol de pedidos anticipados.
PreviousPreOrder(Node)Obtiene el nodo anterior según el algoritmo transversal del árbol de pedidos anticipados.
Remove()Se elimina del padre.
ToString(SaveFormat)Exporta el contenido del nodo a una cadena en el formato especificado.
ToString(SaveOptions)Exporta el contenido del nodo a una cadena usando las opciones de guardado especificadas.

Observaciones

Un rango editable completo en un documento de Word consta de unEditableRangeStart y una coincidenciaEditableRangeEnd con el mismo DNI.

EditableRangeStart yEditableRangeEnd son solo marcadores dentro de un document que especifican dónde comienza y termina el rango editable.

Utilizar elEditableRange clase como una “fachada” para trabajar con un range editable como un solo objeto.

Actualmente, los rangos editables solo se admiten en el nivel en línea, es decir, dentroParagraph, pero el inicio y el final del rango editable pueden estar en párrafos diferentes.

Ejemplos

Muestra cómo limitar los derechos de edición de rangos editables a un grupo/usuario específico.

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.");

    // Cuando protegemos documentos contra escritura, los rangos editables nos permiten elegir áreas específicas que los usuarios pueden editar.
    // Hay dos formas mutuamente excluyentes de reducir la lista de editores permitidos.
    // 1 - Especifica un usuario:
    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 - Especifica un grupo al que se le permite asociar a los usuarios:
    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.");

    // Imprime detalles y contenidos de cada rango editable en el documento.
    EditableRangePrinter editableRangePrinter = new EditableRangePrinter();

    doc.Accept(editableRangePrinter);

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

/// <summary>
/// Recopila propiedades y contenidos de rangos editables visitados en una cadena.
/// </summary>
public class EditableRangePrinter : DocumentVisitor
{
    public EditableRangePrinter()
    {
        mBuilder = new StringBuilder();
    }

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

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

    /// <summary>
    /// Se llama cuando se encuentra un nodo EditableRangeStart en el documento.
    /// </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>
    /// Se llama cuando se encuentra un nodo EditableRangeEnd en el documento.
    /// </summary>
    public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd)
    {
        mBuilder.AppendLine(" -- End of editable range --\n");

        mInsideEditableRange = false;

        return VisitorAction.Continue;
    }

    /// <summary>
    /// Se llama cuando se encuentra un nodo Ejecutar en el documento. Este visitante solo registra ejecuciones que se encuentran dentro de rangos editables.
    /// </summary>
    public override VisitorAction VisitRun(Run run)
    {
        if (mInsideEditableRange) mBuilder.AppendLine("\t\"" + run.Text + "\"");

        return VisitorAction.Continue;
    }

    private bool mInsideEditableRange;
    private readonly StringBuilder mBuilder;
}

Ver también