//// This code is part of Document Solutions for Word demos.// Copyright (c) MESCIUS inc. All rights reserved.//usingSystem;usingSystem.IO;usingSystem.Drawing;usingGrapeCity.Documents.Word; namespaceDsWordWeb.Demos{// This sample demonstrates how to add linked text frames to a DOCX,// with text spanning the frames.publicclassTextFrames {publicGcWordDocumentCreateDocx() {GcWordDocument doc = newGcWordDocument(); doc.Load(Path.Combine("Resources", "WordDocs", "SampleParagraphs.docx")); // Locate the paragraphs for inserting text frames:conststringp1start = "This is the first paragraph of the original document";conststringp2start = "This is the second paragraph of the original document";conststringp3start = "This is the third paragraph of the original document";conststringp4start = "This is the fourth paragraph of the original document"; // Find individual paragraphs inside the document:Paragraph p1 = null, p2 = null, p3 = null, p4 = null;foreach (var p in doc.Body.Paragraphs) {var t = p.GetRange().Text;if (t.StartsWith(p1start)) p1 = p;elseif (t.StartsWith(p2start)) p2 = p;elseif (t.StartsWith(p3start)) p3 = p;elseif (t.StartsWith(p4start)) p4 = p; }if (p1 == null || p2 == null || p3 == null || p4 == null)thrownewException("Unexpected: could not find paragraphs."); // Add new style for text in frames:var style = doc.Styles.Add("FrameTextStyle", StyleType.Character); style.Font.Color.RGB = Color.DarkBlue; style.Font.Bold = true; // Generate a long text that we will put into linked text frames:string ts = "";for (int i = 0; i < 12; ++i) ts += $"Text frame content {i}. "; // NOTE: shapes (including text frames) can be added to text runs only// (e.g. we cannot add a shape directly to a paragraph). // Add a text run at the end of the first paragraph:Run r1 = p1.GetRange().Runs.Add(" Text run added to paragraph 1. The first shape is inserted inline after this. "); // Add a shape to the new text run:Shape s1 = r1.GetRange().Shapes.Add(96, 72); // Add a text frame with the generated text to the new shape:TextFrame tf1 = s1.AddTextFrame(ts); tf1.Format.Margin.AllEdges = 4; foreach (var r in tf1.GetRange().Runs)if (r1 != r) r.Style = style; // The text in the frame is rather long, and will not fit inside s1.// Text frames can be linked so that a long text can span several frames.// We add two linked frames, one to 2nd paragraph, and one to the first// paragraph on the page:var r2 = p2.GetRange().Runs.Add(" Text run added to paragraph 2. The second shape is inserted inline after this. ");var shapes = r2.GetRange().Shapes; var s2 = shapes.Add(192, 72);var ltf2 = s2.AddLinkedTextFrame(tf1); // Default wrap format type for new shapes is inline.// Here we change the 3rd shape's wrap to square with absolute position// relative to the very first paragraph in the document:var s3 = doc.Body.Paragraphs.First.GetRange().Runs.First.GetRange().Shapes.Add(144, 96);var ltf3 = s3.AddLinkedTextFrame(tf1); s3.WrapFormat.Type = WrapType.Square; s3.Position.Vertical.Type = ShapePositionType.Points; s3.Position.Vertical.Offset = 0; s3.Position.Horizontal.Type = ShapePositionType.Points; s3.Position.Horizontal.Offset = doc.Body.Sections.First.PageSetup.ClientWidth - 144; return doc; } }}