public void RemovesEditableRange()
        {
            //ExStart
            //ExFor:EditableRange.Remove
            //ExSummary:Shows how to remove an editable range from a document.
            Document        doc     = new Document(MyDir + "Document.docx");
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Create an EditableRange so we can remove it. Does not have to be well-formed
            EditableRangeStart edRange1Start  = builder.StartEditableRange();
            EditableRange      editableRange1 = edRange1Start.EditableRange;

            builder.Writeln("Paragraph inside editable range");
            EditableRangeEnd edRange1End = builder.EndEditableRange();

            Assert.AreEqual(1, doc.GetChildNodes(NodeType.EditableRangeStart, true).Count); //ExSkip
            Assert.AreEqual(1, doc.GetChildNodes(NodeType.EditableRangeEnd, true).Count);   //ExSkip
            Assert.AreEqual(0, edRange1Start.EditableRange.Id);                             //ExSkip
            Assert.AreEqual("", edRange1Start.EditableRange.SingleUser);                    //ExSkip

            // Remove the range that was just made
            editableRange1.Remove();
            //ExEnd

            Assert.AreEqual(0, doc.GetChildNodes(NodeType.EditableRangeStart, true).Count);
            Assert.AreEqual(0, doc.GetChildNodes(NodeType.EditableRangeEnd, true).Count);
        }
예제 #2
0
        public void UnrestrictedEditableRegions()
        {
            //ExStart:UnrestrictedEditableRegions
            // Upload a document and make it as read-only.
            Document        doc     = new Document(MyDir + "Document.docx");
            DocumentBuilder builder = new DocumentBuilder(doc);

            doc.Protect(ProtectionType.ReadOnly, "MyPassword");

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

            // Start an editable range.
            EditableRangeStart edRangeStart = builder.StartEditableRange();
            // An EditableRange object is created for the EditableRangeStart that we just made.
            EditableRange editableRange = edRangeStart.EditableRange;

            // Put something inside the editable range.
            builder.Writeln("Paragraph inside first editable range");

            // An editable range is well-formed if it has a start and an end.
            EditableRangeEnd edRangeEnd = builder.EndEditableRange();

            builder.Writeln("This paragraph is outside any editable ranges, and cannot be edited.");

            doc.Save(ArtifactsDir + "DocumentProtection.UnrestrictedEditableRegions.docx");
            //ExEnd:UnrestrictedEditableRegions
        }
예제 #3
0
            /// <summary>
            /// Called when the visiting of a EditableRange node is ended.
            /// </summary>
            public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd)
            {
                mDocTraversalDepth--;
                IndentAndAppendLine("[EditableRange end]");
                mVisitorIsInsideEditableRange = false;

                return(VisitorAction.Continue);
            }
            /// <summary>
            /// Called when an EditableRangeEnd node is encountered in the document.
            /// </summary>
            public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd)
            {
                mBuilder.AppendLine(" -- End of editable range --\n");

                mInsideEditableRange = false;

                return(VisitorAction.Continue);
            }
            /// <summary>
            /// Called when an EditableRangeEnd node is encountered in the document.
            /// </summary>
            public override VisitorAction VisitEditableRangeEnd(EditableRangeEnd editableRangeEnd)
            {
                mBuilder.AppendLine(" -- End of editable range -- ");

                mInsideEditableRange = false;

                // Let the visitor continue visiting other nodes
                return VisitorAction.Continue;
            }
        public void RemovesEditableRange()
        {
            //ExStart
            //ExFor:EditableRange.Remove
            //ExSummary:Shows how to remove an editable range from a document.
            Document doc = new Document(MyDir + "Document.doc");
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Create an EditableRange so we can remove it. Does not have to be well-formed.
            EditableRangeStart edRange1Start = builder.StartEditableRange();
            EditableRange editableRange1 = edRange1Start.EditableRange;
            builder.Writeln("Paragraph inside editable range");
            EditableRangeEnd edRange1End = builder.EndEditableRange();

            // Remove the range that was just made.
            editableRange1.Remove();
            //ExEnd
        }
        public void CreateEditableRanges()
        {
            //ExStart
            //ExFor:DocumentBuilder.StartEditableRange
            //ExFor:DocumentBuilder.EndEditableRange
            //ExFor:DocumentBuilder.EndEditableRange(EditableRangeStart)
            //ExSummary:Shows how to start and end an editable range.
            Document        doc     = new Document(MyDir + "Document.doc");
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Start an editable range.
            EditableRangeStart edRange1Start = builder.StartEditableRange();

            // An EditableRange object is created for the EditableRangeStart that we just made.
            EditableRange editableRange1 = edRange1Start.EditableRange;

            // Put something inside the editable range.
            builder.Writeln("Paragraph inside first editable range");

            // An editable range is well-formed if it has a start and an end.
            // Multiple editable ranges can be nested and overlapping.
            EditableRangeEnd edRange1End = builder.EndEditableRange();

            // Both the start and end automatically belong to editableRange1.
            Console.WriteLine(editableRange1.EditableRangeStart.Equals(edRange1Start)); // True
            Console.WriteLine(editableRange1.EditableRangeEnd.Equals(edRange1End));     // True

            // Explicitly state which EditableRangeStart a new EditableRangeEnd should be paired with.
            EditableRangeStart edRange2Start = builder.StartEditableRange();

            builder.Writeln("Paragraph inside second editable range");
            EditableRange    editableRange2 = edRange2Start.EditableRange;
            EditableRangeEnd edRange2End    = builder.EndEditableRange(edRange2Start);

            // Both the start and end automatically belong to editableRange2.
            Console.WriteLine(editableRange2.EditableRangeStart.Equals(edRange2Start)); // True
            Console.WriteLine(editableRange2.EditableRangeEnd.Equals(edRange2End));     // True
            //ExEnd
        }
        [Test] //ExSkip
        public void CreateEditableRanges()
        {
            Document doc = new Document(MyDir + "Document.doc");
            DocumentBuilder builder = new DocumentBuilder(doc);

            // Start an editable range
            EditableRangeStart edRange1Start = builder.StartEditableRange();

            // An EditableRange object is created for the EditableRangeStart that we just made
            EditableRange editableRange1 = edRange1Start.EditableRange;

            // Put something inside the editable range
            builder.Writeln("Paragraph inside first editable range");

            // An editable range is well-formed if it has a start and an end
            // Multiple editable ranges can be nested and overlapping 
            EditableRangeEnd edRange1End = builder.EndEditableRange();

            // Explicitly state which EditableRangeStart a new EditableRangeEnd should be paired with
            EditableRangeStart edRange2Start = builder.StartEditableRange();
            builder.Writeln("Paragraph inside second editable range");
            EditableRange editableRange2 = edRange2Start.EditableRange;
            EditableRangeEnd edRange2End = builder.EndEditableRange(edRange2Start);

            // Editable range starts and ends have their own respective node types
            Assert.AreEqual(NodeType.EditableRangeStart, edRange1Start.NodeType);
            Assert.AreEqual(NodeType.EditableRangeEnd, edRange1End.NodeType);

            // Editable range IDs are unique and set automatically
            Assert.AreEqual(0, editableRange1.Id);
            Assert.AreEqual(1, editableRange2.Id);

            // Editable range starts and ends always belong to a range
            Assert.AreEqual(edRange1Start, editableRange1.EditableRangeStart);
            Assert.AreEqual(edRange1End, editableRange1.EditableRangeEnd);

            // They also inherit the ID of the entire editable range that they belong to
            Assert.AreEqual(editableRange1.Id, edRange1Start.Id);
            Assert.AreEqual(editableRange1.Id, edRange1End.Id);
            Assert.AreEqual(editableRange2.Id, edRange2Start.EditableRange.Id);
            Assert.AreEqual(editableRange2.Id, edRange2End.EditableRangeStart.EditableRange.Id);

            // If the editable range was found in a document, it will probably have something in the single user property
            // But if we make one programmatically, the property is null by default
            Assert.AreEqual(null, editableRange1.SingleUser);

            // We have to set it ourselves if we want the ranges to belong to somebody
            editableRange1.SingleUser = "******";
            editableRange2.SingleUser = "******";

            // Initialize a custom visitor for editable ranges that will print their contents 
            EditableRangeInfoPrinter editableRangeReader = new EditableRangeInfoPrinter();

            // Both the start and end of an editable range can accept visitors, but not the editable range itself
            edRange1Start.Accept(editableRangeReader);
            edRange2End.Accept(editableRangeReader);
            
            // Or, if we want to go over all the editable ranges in a document, we can get the document to accept the visitor
            editableRangeReader.Reset();
            doc.Accept(editableRangeReader);

            Console.WriteLine(editableRangeReader.ToText());
        }
        public void CreateAndRemove()
        {
            //ExStart
            //ExFor:DocumentBuilder.StartEditableRange
            //ExFor:DocumentBuilder.EndEditableRange
            //ExFor:EditableRange
            //ExFor:EditableRange.EditableRangeEnd
            //ExFor:EditableRange.EditableRangeStart
            //ExFor:EditableRange.Id
            //ExFor:EditableRange.Remove
            //ExFor:EditableRangeEnd.EditableRangeStart
            //ExFor:EditableRangeEnd.Id
            //ExFor:EditableRangeEnd.NodeType
            //ExFor:EditableRangeStart.EditableRange
            //ExFor:EditableRangeStart.Id
            //ExFor:EditableRangeStart.NodeType
            //ExSummary:Shows how to work with an editable range.
            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.");

            // Editable ranges allow us to leave parts of protected documents open for editing.
            EditableRangeStart editableRangeStart = builder.StartEditableRange();

            builder.Writeln("This paragraph is inside an editable range, and can be edited.");
            EditableRangeEnd editableRangeEnd = builder.EndEditableRange();

            // A well-formed editable range has a start node, and end node.
            // These nodes have matching IDs and encompass editable nodes.
            EditableRange editableRange = editableRangeStart.EditableRange;

            Assert.AreEqual(editableRangeStart.Id, editableRange.Id);
            Assert.AreEqual(editableRangeEnd.Id, editableRange.Id);

            // Different parts of the editable range link to each other.
            Assert.AreEqual(editableRangeStart.Id, editableRange.EditableRangeStart.Id);
            Assert.AreEqual(editableRangeStart.Id, editableRangeEnd.EditableRangeStart.Id);
            Assert.AreEqual(editableRange.Id, editableRangeStart.EditableRange.Id);
            Assert.AreEqual(editableRangeEnd.Id, editableRange.EditableRangeEnd.Id);

            // We can access the node types of each part like this. The editable range itself is not a node,
            // but an entity which consists of a start, an end, and their enclosed contents.
            Assert.AreEqual(NodeType.EditableRangeStart, editableRangeStart.NodeType);
            Assert.AreEqual(NodeType.EditableRangeEnd, editableRangeEnd.NodeType);

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

            doc.Save(ArtifactsDir + "EditableRange.CreateAndRemove.docx");

            // Remove an editable range. All the nodes that were inside the range will remain intact.
            editableRange.Remove();
            //ExEnd

            Assert.AreEqual("Hello world! Since we have set the document's protection level to read-only, we cannot edit this paragraph without the password.\r" +
                            "This paragraph is inside an editable range, and can be edited.\r" +
                            "This paragraph is outside the editable range, and cannot be edited.", doc.GetText().Trim());
            Assert.AreEqual(0, doc.GetChildNodes(NodeType.EditableRangeStart, true).Count);

            doc = new Document(ArtifactsDir + "EditableRange.CreateAndRemove.docx");

            Assert.AreEqual(ProtectionType.ReadOnly, doc.ProtectionType);
            Assert.AreEqual("Hello world! Since we have set the document's protection level to read-only, we cannot edit this paragraph without the password.\r" +
                            "This paragraph is inside an editable range, and can be edited.\r" +
                            "This paragraph is outside the editable range, and cannot be edited.", doc.GetText().Trim());

            editableRange = ((EditableRangeStart)doc.GetChild(NodeType.EditableRangeStart, 0, true)).EditableRange;

            TestUtil.VerifyEditableRange(0, string.Empty, EditorType.Unspecified, editableRange);
        }