AnnotationTypes.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
// 
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Pdf.Annotations;

namespace DsPdfWeb.Demos.Basics
{
    // 注釈をPDFドキュメントに追加する方法を示します。
    public class Annotationsiew
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();
            var g = page.Graphics;
            // 注釈の作成者のユーザー名。
            var user1 = "作成者1";
            var user2 = "作成者2";

            TextFormat tf = new TextFormat() { Font = StandardFonts.Helvetica, FontSize = 10 };
            var noteWidth = 72 * 4;
            var gap = 8;

            var rc = Common.Util.AddNote(
                "このサンプルでは、DsPdfで作成できる注釈の種類を紹介しています。\n" +
                "一部の注釈タイプは、特定のビューワ(ブラウザの組み込みビューワなど)では表示されない場合があります。" +
                "このページの注釈をすべて表示するには、Acrobat Readerまたはその他のフル機能のPDFビューワが必要です。",
                page);

            // テキスト注釈。
            var ip = new PointF(rc.X, rc.Bottom + gap);
            rc = Common.Util.AddNote(
                "このメモの右側には、赤色のテキスト注釈があります。",
                page, new RectangleF(ip.X, ip.Y, noteWidth, 100));
            var textAnnot = new TextAnnotation()
            {
                UserName = user1,
                Contents = "これは注釈(赤)です。",
                Rect = new RectangleF(rc.Right, rc.Top, 36, 36),
                Color = Color.Red,
            };
            page.Annotations.Add(textAnnot);
            // 以前の注釈への返信。
            var textAnnotReply = new TextAnnotation()
            {
                UserName = user2,
                Contents = "最初の注釈への返信です。",
                Rect = new RectangleF(rc.Right, rc.Top, 36, 36),
                ReferenceAnnotation = textAnnot,
                ReferenceType = AnnotationReferenceType.Reply,
            };
            page.Annotations.Add(textAnnotReply);

            // 最初からコメントが表示されているテキスト注釈。
            ip = new PointF(rc.X, rc.Bottom + gap);
            rc = Common.Util.AddNote(
                "このメモの右側には、最初からコメントが表示されている緑色のテキスト注釈があります。",
                page, new RectangleF(ip.X, ip.Y, noteWidth, 100));
            var textAnnotOpen = new TextAnnotation()
            {
                Open = true,
                UserName = user1,
                Contents = "これはコメントが表示されている注釈(緑)です。",
                Rect = new RectangleF(rc.Right, rc.Top, 36, 36),
                Color = Color.Green,
            };
            page.Annotations.Add(textAnnotOpen);

            // フリーテキスト注釈(ページに直接表示)。
            ip = new PointF(rc.X, rc.Bottom + gap);
            rc = Common.Util.AddNote(
                "右下に青いフリーテキスト注釈が配置されており、そこからこのメモへと吹き出し線が描画されています。",
                page, new RectangleF(ip.X, ip.Y, noteWidth, 100));
            var freeAnnot = new FreeTextAnnotation()
            {
                Rect = new RectangleF(rc.Right + 18, rc.Bottom + 9, 72 * 2, 72),
                CalloutLine = new PointF[]
                {
                    new PointF(rc.Left + rc.Width / 2, rc.Bottom),
                    new PointF(rc.Left + rc.Width / 2, rc.Bottom + 9 + 36),
                    new PointF(rc.Right + 18, rc.Bottom + 9 + 36),
                },
                LineWidth = 1,
                LineEndStyle = LineEndingStyle.OpenArrow,
                LineDashPattern = new float[] { 8, 4 },
                Contents = "これはフリーテキスト注釈で、左上のメモに向かう吹き出し線があります。",
                Color = Color.LightSkyBlue,
            };
            page.Annotations.Add(freeAnnot);

            // 内部にリッチテキストを含む別のフリーテキスト注釈。
            ip = new PointF(rc.X, freeAnnot.Rect.Bottom + gap);
            var freeRichAnnot = new FreeTextAnnotation()
            {
                Rect = new RectangleF(ip.X - 144, ip.Y, 72 * 5, 72),
                LineWidth = 1,
                Color = Color.LightSalmon,
                RichText =
                    "<body><p>これは<i>フリーテキスト注釈</i>です<b><i>リッチテキスト</i></b>が含まれています。</p>" +
                    "<p><br /><b>フリーテキスト注釈</b>は、ページに直接テキストが表示されますが、" +
                    "他の注釈としてページの境界の外に置くこともできます。</p></body>"
            };
            page.Annotations.Add(freeRichAnnot);

            // ノートの周りの四角形注釈。
            ip = new PointF(rc.X, freeRichAnnot.Rect.Bottom + gap * 2);
            rc = Common.Util.AddNote(
                "このメモの周りには、3pt幅のオレンジ色の線で描画された四角形注釈があり、リッチテキストが紐づけられています。",
                page, new RectangleF(ip.X, ip.Y, noteWidth, 100));

            rc.Inflate(8, 8);
            var squareAnnot = new SquareAnnotation()
            {
                UserName = user2,
                Rect = rc,
                LineWidth = 3,
                Color = Color.Orange,
                RichText =
                    "<body><p>この<b><i>リッチテキスト</i></b>はテキストメモの周りに描画された四角形注釈に紐づいています。</p></body>"
            };
            page.Annotations.Add(squareAnnot);

            // PDF ドキュメントを保存します。
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}