//
// 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;
namespace DsWordWeb.Demos
{
// This sample shows how to copy or move ranges within a document,
// or between documents, using the RangeBase.CopyTo()/MoveTo() methods.
//
// The original SampleParagraphs.docx used in this sample can be
// seen by running the SampleParagraphs sample.
public class RangeCopyMove
{
public GcWordDocument CreateDocx()
{
const string p1start = "This is the first paragraph of the original document";
const string p2start = "This is the second paragraph of the original document";
const string p3start = "This is the third paragraph of the original document";
const string p4start = "This is the fourth paragraph of the original document";
// Load the sample DOCX file (see SampleParagraphs) into a GcWordDocument instance:
var srcDoc = new GcWordDocument();
srcDoc.Load(Path.Combine("Resources", "WordDocs", "SampleParagraphs.docx"));
// Get the range of paragraphs to copy:
var srcRng = srcDoc.Body.GetPersistentRange(srcDoc.Body.Paragraphs[2], srcDoc.Body.Paragraphs.Last);
// We use another document here to demonstrate that CopyTo()/MoveTo() methods
// can be used to copy/move content between documents:
var doc = new GcWordDocument();
srcRng.CopyTo(doc.Body, InsertLocation.Start);
// Find individual paragraphs inside the new document to manipulate:
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;
else if (t.StartsWith(p2start))
p2 = p;
else if (t.StartsWith(p3start))
p3 = p;
else if (t.StartsWith(p4start))
p4 = p;
}
if (p1 == null || p2 == null || p3 == null || p4 == null)
throw new Exception("Unexpected: could not find paragraphs.");
// Move first paragraph to the end of the document with default formatting option
// (preserve formatting):
p1.GetRange().MoveTo(doc.Body, InsertLocation.End);
// Move second paragraph to the end of the document, clearing formatting:
p2.GetRange().MoveTo(doc.Body, InsertLocation.End, FormattingCopyStrategy.Clear);
// Copy third paragraph to the end of the document, clearing formatting:
p3.GetRange().CopyTo(doc.Body, InsertLocation.End, FormattingCopyStrategy.Clear);
// Add a note at the end of the document:
doc.Body.Sections.Last.GetRange().Paragraphs.Add($"Created by DsWord on {Util.TimeNow():R}.");
// Done:
return doc;
}
}
}