Skip to main content

Search OfficeIMO

Enter a topic, API type, or PowerShell command.

Project charter

Start a project with a shared definition of success. This charter keeps scope, ownership, and acceptance evidence together so the delivery team can update one document as the plan changes.

Start with
Project scope and milestone data
Generate
DOCX + PDF
Generated Word example: Project charter
Page 1 · Generated by the example below

How it works

  1. Define the document

    Set the document title and default font, then use Word heading styles for a navigable structure.

  2. Describe the boundary

    Add a bulleted scope list and a bookmark on the scope heading. The bookmark gives later code a stable place to find that section.

  3. Turn milestones into a table

    Populate rows from a two-dimensional array, emphasize the header, and keep the acceptance evidence beside its owner.

The C# source

This is the complete example file used to generate the download. The walkthrough runner creates the output directory and produces the additional previews.

using System.IO;
using OfficeIMO.Word;

namespace OfficeIMO.Examples.Showcase.Workflows;

/// <summary>Creates an editable project charter with scope, milestones, and named owners.</summary>
internal static class ProjectCharter {
    internal static void Create(string folder) {
        using WordDocument document = WordDocument.Create(Path.Combine(folder, "example.docx"));
        document.Settings.FontFamily = "Carlito";
        document.Settings.FontSize = 11;
        document.BuiltinDocumentProperties.Title = "Project charter";
        document.AddParagraph("Project charter").Style = WordParagraphStyles.Heading1;
        document.AddParagraph("NORTHWIND / CUSTOMER PORTAL / VERSION 1.0");
        document.AddParagraph("Give the delivery team one agreed reference for the outcome, scope, and acceptance decision.");

        document.AddParagraph("Outcome and boundaries").AddBookmark("Scope").Style = WordParagraphStyles.Heading2;
        WordList scope = document.AddList(WordListStyle.Bulleted);
        scope.AddItem("Provide a single place to submit and track service requests.");
        scope.AddItem("Include request history and a clear escalation path.");
        scope.AddItem("Keep billing and account administration outside this release.");

        document.AddParagraph("Delivery milestones").Style = WordParagraphStyles.Heading2;
        string[,] values = {
            { "Milestone", "Owner", "Acceptance evidence" },
            { "Discovery", "Product", "Reviewed service journey" },
            { "Pilot", "Engineering", "Ten completed pilot requests" },
            { "Launch", "Operations", "Support and recovery walkthrough" }
        };
        WordTable table = document.AddTable(4, 3, WordTableStyle.TableGrid);
        for (int row = 0; row < 4; row++) {
            for (int column = 0; column < 3; column++) {
                var paragraph = table.Rows[row].Cells[column].Paragraphs[0];
                paragraph.Text = values[row, column];
                paragraph.Bold = row == 0;
                if (row == 0) table.Rows[row].Cells[column].ShadingFillColorHex = "E8EEF8";
            }
        }
        document.AddParagraph("Success measure").Style = WordParagraphStyles.Heading2;
        document.AddParagraph("At least 90% of pilot requests reach the right team without manual reassignment.");
        foreach (WordParagraph paragraph in document.Paragraphs) {
            paragraph.FontFamily = "Carlito";
            paragraph.FontSize = 11;
            paragraph.LineSpacingAfterPoints = 7;
            if (paragraph.Style == WordParagraphStyles.Heading1) {
                paragraph.FontSize = 26;
                paragraph.Bold = true;
                paragraph.LineSpacingAfterPoints = 12;
            } else if (paragraph.Style == WordParagraphStyles.Heading2) {
                paragraph.FontSize = 15;
                paragraph.Bold = true;
                paragraph.LineSpacingBeforePoints = 12;
                paragraph.LineSpacingAfterPoints = 6;
            }
        }
        foreach (WordTable styledTable in document.Tables) {
            styledTable.SetWidthPercentage(100);
            styledTable.SetColumnWidthsPercentage(25, 22, 53);
            foreach (var row in styledTable.Rows) {
                foreach (var cell in row.Cells) {
                    cell.MarginTopCentimeters = 0.10;
                    cell.MarginBottomCentimeters = 0.10;
                    foreach (var paragraph in cell.Paragraphs) {
                        paragraph.FontFamily = "Carlito";
                        paragraph.FontSize = 11;
                        paragraph.LineSpacingAfterPoints = 3;
                    }
                }
            }
        }
        document.Save();
    }
}
Open the C# source file

Run it from the source checkout

Clone the OfficeIMO repository and run this command from its root with the .NET 10 SDK. The first run restores the example project's dependencies.

dotnet run --project OfficeIMO.Examples -f net10.0 -- --showcase-workflows --showcase-example word-project-charter

The files are written to OfficeIMO.Examples/bin/Debug/net10.0/Documents/Workflows/word-project-charter/. To use the example in your application, start with the Word guide and its package setup.

Downloads and scope

What the preview shows

The linked C# example generates this file. The runner reopens and validates the DOCX, exports a PDF, and the preview renders that PDF.

What to keep in mind

The bookmark is part of the DOCX structure. The PDF preview demonstrates page layout; it does not expose Word bookmark navigation.

Word API reference · Artifact hashes and provenance

Continue with another example

Example source

Download source