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

namespace DsPdfWeb.Demos
{
    // このサンプルは、RedactOptions.CopyImagesOnRedact プロパティの使用方法を示しています。
    // デフォルトでは、画像の一部または全部が編集エリア内に含まれており、かつその画像がPDF内の別の場所にも存在する場合、
    // すべての場所で影響を受け、ドキュメント全体でその画像への編集が適用されます。
    // RedactOptions.CopyImagesOnRedact プロパティを使用すると、この動作を変更できます。
    // このプロパティが true(デフォルトは false)の場合、編集を適用する前に画像がコピーされ、
    // 編集エリア内にあるコピーのみが編集の影響を受けます。
    // 
    // このサンプルでは、2ページのPDFをロードし、1ページ目に同じ画像が3枚、
    // 2ページ目にも3枚表示されるようになっています。
    // そして、ドキュメントに2つの墨消し注釈を追加し、どちらも1ページ目の最初の画像と異なる部分に重ねます。
    // 
    // 1つ目の編集は赤色の墨消し注釈を画像に重ねて追加すると、
    // すべての画像に赤色の墨消し注釈が適用されます。(デフォルト設定)
    // 
    // 2つ目の編集では、CopyImagesOnRedact を true に設定し、
    // 青色の墨消し注釈を画像に重ねて追加すると、編集エリア内にある画像にのみ青色の墨消し注釈が追加されます。
    // その結果、1ページ目の最初の画像の右下部分にのみ青色の墨消し注釈が表示されます。
    // 
    // ※このサンプルで使用されているPDFは @{ImageTransparency} によって生成されました。
    public class RedactCopyImages
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            // 同じ画像を複数の場所に設定したPDFの読み込み。
            using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "ImageTransparency.pdf"));
            doc.Load(fs);
            // 最初のページを複製します
            doc.Pages.ClonePage(0, 1);

            // この編集はすべての画像の場所に影響します。
            var redact0 = new RedactAnnotation()
            {
                Page = doc.Pages[0],
                Rect = new RectangleF(50, 50, 50, 50),
                OverlayFillColor = Color.Red,
            };
            // この墨消しは、実際の墨消し位置にある画像にのみ影響します。
            var redact1 = new RedactAnnotation()
            {
                Page = doc.Pages[0],
                Rect = new RectangleF(120, 120, 50, 50),
                OverlayFillColor = Color.Blue,
            };

            // redact0 をデフォルトのオプションで適用します・
            doc.Redact(redact0);
            // CopyImagesOnRedact を使用して redact1 を適用します。
            doc.Redact(redact1, new RedactOptions() { CopyImagesOnRedact = true });

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