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;
}
}
}