//
// This code is part of Document Solutions for Word demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Linq;
using GrapeCity.Documents.Word;
using GcFont = GrapeCity.Documents.Word.Font;
namespace DsWordWeb.Demos
{
// This sample demonstrates how the InsertLocation value affects the result
// when inserting a new paragraph near an existing paragraph (the 'anchor').
//
// In this sample, we first add five anchor paragraphs with different background colors,
// interspersed with 'separator' paragraphs with default formatting.
// We then insert four new paragraphs with default formatting near each of the
// anchor paragraph but using different InsertLocation values (Before,
// at Start, at End, and After). Finally, we add the fifth new paragraph
// using the Add() method.
//
// The different background colors of the anchor paragraphs help visualizing
// what happens when different insert locations are used. In particular note
// how InsertLocation.Start and InsertLocation.End create an additional empty
// paragraph with the same style as the style of the anchor paragraph (note
// the same background color). This happens because these insert locations point
// to just after the start, and to just before the end, respectively, of the anchor
// paragraph, so insertion at these locations also splits the anchor paragraph.
public class InsertParagraphs
{
public GcWordDocument CreateDocx()
{
var doc = new GcWordDocument();
var baseStyle = doc.Styles.Add("Base-style", StyleType.Paragraph);
var codeStyle = doc.Styles[BuiltInStyleId.HtmlCode];
const string basePara = "This is anchor paragraph number {0}, with style 'Base-style-{0}'.";
const string sepPara = "\t--- This is separator between anchors {0} and {1} ---";
// Add 5 'anchor' paragraphs with different background colors:
doc.Body.Paragraphs.Add(string.Format(sepPara, "start", 1));
var p1style = doc.Styles.Add("Base-style-1", baseStyle);
p1style.ParagraphFormat.Shading.BackgroundPatternColor.RGB = Color.FromArgb(unchecked((int)0xFF7BD3EA));
var p1 = doc.Body.Paragraphs.Add(string.Format(basePara, 1), p1style);
doc.Body.Paragraphs.Add(string.Format(sepPara, 1, 2));
var p2style = doc.Styles.Add("Base-style-2", baseStyle);
p2style.ParagraphFormat.Shading.BackgroundPatternColor.RGB = Color.FromArgb(unchecked((int)0xFFC7DB9C));
var p2 = doc.Body.Paragraphs.Add(string.Format(basePara, 2), p2style);
doc.Body.Paragraphs.Add(string.Format(sepPara, 2, 3));
var p3style = doc.Styles.Add("Base-style-3", baseStyle);
p3style.ParagraphFormat.Shading.BackgroundPatternColor.RGB = Color.FromArgb(unchecked((int)0xFFFFF08D));
var p3 = doc.Body.Paragraphs.Add(string.Format(basePara, 3), p3style);
doc.Body.Paragraphs.Add(string.Format(sepPara, 3, 4));
var p4style = doc.Styles.Add("Base-style-4", baseStyle);
p4style.ParagraphFormat.Shading.BackgroundPatternColor.RGB = Color.FromArgb(unchecked((int)0xFFFDAB9E));
var p4 = doc.Body.Paragraphs.Add(string.Format(basePara, 4), p4style);
doc.Body.Paragraphs.Add(string.Format(sepPara, 4, 5));
var p5style = doc.Styles.Add("Base-style-5", baseStyle);
p5style.ParagraphFormat.Shading.BackgroundPatternColor.RGB = Color.FromArgb(unchecked((int)0xFFCDC1FF));
var p5 = doc.Body.Paragraphs.Add(string.Format(basePara, 5), p5style);
doc.Body.Paragraphs.Add(string.Format(sepPara, 5, "end"));
// Insert paragraphs with default style using different InsertLocation's:
p1.GetRange().Paragraphs.Insert("Paragraph inserted before paragraph 1 via ", InsertLocation.Before).AddRun("\np1.GetRange().Paragraphs.Insert(..., InsertLocation.Before);", codeStyle);
p2.GetRange().Paragraphs.Insert("Paragraph inserted at start of paragraph 2 via ", InsertLocation.Start).AddRun("\np2.GetRange().Paragraphs.Insert(..., InsertLocation.Start);", codeStyle);
p3.GetRange().Paragraphs.Insert("Paragraph inserted at end of paragraph 3 via ", InsertLocation.End).AddRun("\np3.GetRange().Paragraphs.Insert(..., InsertLocation.End);", codeStyle);
p4.GetRange().Paragraphs.Insert("Paragraph inserted after paragraph 4 via ", InsertLocation.After).AddRun("\np4.GetRange().Paragraphs.Insert(..., InsertLocation.After);", codeStyle);
// Paragraphs.Add() is a shortcut to Insert(InsertLocation.End):
p5.GetRange().Paragraphs.Add("Paragraph added after base paragraph 5 via ").AddRun("\np5.GetRange().Paragraphs.Add();", codeStyle);
// Done:
return doc;
}
}
}