InsertVideo.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;
using DsPdfWeb.Demos.Common;
using System.Xml.Linq;
using System.Linq;

namespace DsPdfWeb.Demos.Basics
{
    // このデモでは、PDF 内の画像をビデオ クリップに置き換える方法を示します
    public class InsertVideo
    {
        public int CreatePDF(Stream stream)
        {
            var pdfPath = Path.Combine("Resources", "PDFs", "Wetlands.pdf");
            var videoPath = Path.Combine("Resources", "Video", "waterfall.mp4");

            using var fs = File.OpenRead(pdfPath);
            var doc = new GcPdfDocument();
            doc.Load(fs);
            var page = doc.Pages.First();

            // 最初のページで最大の画像を検索:
            RectangleF imageRect = RectangleF.Empty;
            foreach (var img in page.GetImages())
            {
                foreach (var l in img.Locations.Where(l_ => l_.Page.Index == 0))
                {
                    var r = l.PageBounds.ToRect();
                    if (r.Height > imageRect.Height)
                        imageRect = r;
                }
            }
            if (imageRect == RectangleF.Empty)
                throw new Exception("Could not find an image on the first page.");

            // 画像を除去:
            doc.Redact(new RedactAnnotation() { Page = page, Rect = imageRect });

            // 以前に画像が占めていた四角形にビデオ クリップを追加:
            var rma = new RichMediaAnnotation();
            var videoEfs = EmbeddedFileStream.FromFile(doc, videoPath);
            var videoFileSpec = FileSpecification.FromEmbeddedStream(Path.GetFileName(videoPath), videoEfs);
            rma.SetVideo(videoFileSpec);
            rma.PresentationStyle = RichMediaAnnotationPresentationStyle.Embedded;
            rma.ActivationCondition = RichMediaAnnotationActivation.PageBecomesVisible;
            rma.DeactivationCondition = RichMediaAnnotationDeactivation.PageBecomesInvisible;
            rma.ShowNavigationPane = true;
            rma.Page = page;
            rma.Rect = imageRect;

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