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

namespace DsPdfWeb.Demos
{
    // 正規表現(ここでは日付や時刻の形式にマッチする文字列を検索)に一致する
    // すべての文字列を検出し、それらのテキスト描画属性を変更します。
    // 変更可能な属性は以下の通りです:
    // - テキスト描画モード(塗りつぶし/輪郭描画/クリップ)
    // - テキストの塗りつぶし色と透明度(アルファ)
    // - テキストの輪郭色と透明度(アルファ)
    // なお、元のPDF(変更前の状態)は結果に付加されます。
    // ("オリジナルPDFおよび検索用正規表現は、DeleteText で使用したものと同じです。")
    public class ChangeTextAttrs
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "TimeSheet.pdf"));
            doc.Load(fs);
            var pageCount = doc.Pages.Count;
            // PDFを複製します:
            doc.MergeWithDocument(doc);
            // 最初のページのテキストを編集します:
            for (int i = 0; i < pageCount; ++i)
            {
                var ftps = new FindTextParams(@"\d+/\d+/\d+|\d+:\d+| am| pm", false, false, 72, 72, false, true);
                // TextRenderingAttrs では、以下のテキスト描画属性を指定できます:
                // - RenderingMode(描画モード)
                // - FillColor(塗りつぶしの色)
                // - FillAlpha(塗りつぶしの透明度)
                // - StrokeAlpha(輪郭の透明度)
                // - StrokePen(輪郭のペン/線の設定)
                doc.Pages[i].SetTextRenderingAttrs(ftps, new TextRenderingAttrs() {
                    RenderingMode = TextRenderingMode.FillStroke,
                    FillColor = Color.Red,
                    FillAlpha = 0.5f,
                    StrokeAlpha = 1.0f,
                    StrokePen = new GrapeCity.Documents.Drawing.Pen(Color.Blue, 1)});
            }
            // PDF ドキュメントを保存します。
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}