RichMedia.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;

namespace DsPdfWeb.Demos.Basics
{
    // このデモでは、RichMediaAnnotation を使用してビデオ クリップとオーディオ クリップを PDF に追加する方法を示します
    public class RichMedia
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();

            var videoPath = Path.Combine("Resources", "Video", "waterfall.mp4");
            var audioPath0 = Path.Combine("Resources", "Sounds", "city-noises.mp3");
            var audioPath1 = Path.Combine("Resources", "Sounds", "dong.wav");
            const int smallGap = 18;
            const int largeGap = 36;

            // ページが表示されたときに再生されるビデオを追加:
            var rc = Util.AddNote("ページが表示されると、次のビデオが自動的に再生されます。", page);
            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 = new RectangleF(rc.X, rc.Bottom + smallGap, 72 * 5, 72 * 5 * 0.56f);

            // ポップアップ ウィンドウで再生されるのと同じビデオ クリップを追加(FileSpecific を再利用):
            rc = Util.AddNote("ポップアップ ウィンドウで再生される同じビデオ", page, new RectangleF(rc.X, rma.Rect.Bottom + largeGap, rc.Width, 0));
            rma = new RichMediaAnnotation();
            rma.SetVideo(videoFileSpec);
            rma.PresentationStyle = RichMediaAnnotationPresentationStyle.Windowed;
            rma.ActivationCondition = RichMediaAnnotationActivation.UserAction;
            rma.Page = page;
            rma.Rect = new RectangleF(rc.X, rc.Bottom + smallGap, 144, 144);

            // いくつかのオーディオ クリップを追加:
            rc = Util.AddNote("クリックすると再生される 2 つのオーディオ クリップ", page, new RectangleF(rc.X, rma.Rect.Bottom + largeGap, rc.Width, 0));
            rma = new RichMediaAnnotation();
            var audioEfs0 = EmbeddedFileStream.FromFile(doc, audioPath0);
            var audioFileSpec0 = FileSpecification.FromEmbeddedStream(Path.GetFileName(audioPath0), audioEfs0);
            rma.SetAudio(audioFileSpec0);
            rma.PresentationStyle = RichMediaAnnotationPresentationStyle.Embedded;
            rma.ActivationCondition = RichMediaAnnotationActivation.UserAction;
            rma.Page = page;
            rma.Rect = new RectangleF(rc.X, rc.Bottom + smallGap, 72, 36);
            //
            rma = new RichMediaAnnotation();
            var audioEfs1 = EmbeddedFileStream.FromFile(doc, audioPath1);
            var audioFileSpec1 = FileSpecification.FromEmbeddedStream(Path.GetFileName(audioPath1), audioEfs1);
            rma.SetAudio(audioFileSpec1);
            rma.PresentationStyle = RichMediaAnnotationPresentationStyle.Embedded;
            rma.ActivationCondition = RichMediaAnnotationActivation.UserAction;
            rma.Page = page;
            rma.Rect = new RectangleF(rc.X + 144, rc.Bottom + smallGap, 72, 36);

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