InsertVideo.cs
- //
- // This code is part of Document Solutions for PDF demos.
- // Copyright (c) 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
- {
- // This demo shows how to replace an image in a PDF with a video clip.
- 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();
-
- // Find the largest image on the first page:
- 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.");
-
- // Remove it:
- doc.Redact(new RedactAnnotation() { Page = page, Rect = imageRect });
-
- // Add a video clip in the rectangle previously occupied by the image:
- 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;
-
- // Done:
- doc.Save(stream);
- return doc.Pages.Count;
- }
- }
- }
-