//
// 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.Collections.Generic;
using System.Linq;
using GrapeCity.Documents.Word;
namespace DsWordWeb.Demos
{
// This sample demonstrates one possible approach to generating documents
// using a specially prepared DOCX as the template, and filled with data programmatically,
// useful for example in mail merge applications.
// Here the template document has parts that should be replaced with data marked
// with bookmarks, each bookmark defined on the whole part that needs replacing.
// For convenience, such parts in the document text are enclosed in square brackets,
// with text equal to the corresponding bookmark's name.
// In MS Word, use Insert | Bookmarks to inspect or add bookmarks.
public class MailMergeBookmarks
{
public GcWordDocument CreateDocx()
{
GcWordDocument doc = new GcWordDocument();
doc.Load(Path.Combine("Resources", "WordDocs", "MailMergeBmk-tpl.docx"));
var bmks = doc.Body.Bookmarks;
// Replace bookmarks with actual data. In a real life sample,
// this would usually be a loop over a data source.
setBmkText("title", "Mr.");
setBmkText("surname", "Smith");
setBmkText("address", "123 Bits Dr.");
setBmkText("city", "Byteville");
setBmkText("state", "VT");
setBmkText("zip", "12345");
setBmkText("country", "U.S.A.");
// Done:
return doc;
// Method to replace a bookmarked text with a specified value.
// Note:
// - We replace the first bookmarked run with the specified value,
// so the replacement will be formatted as the first bookmarked run;
// - MS Word may have created multiple runs for a bookmarked text,
// so we need to make sure we remove all but the first run.
void setBmkText(string bmk, string value)
{
if (!bmks.Contains(bmk))
return;
var t = bmks[bmk].GetRange();
t.Texts[0].Value = value;
for (int i = t.Texts.Count - 1; i > 0; --i)
t.Texts[i].Delete();
}
}
}
}