使用 Open XML SDK 添加到现有图像的超链接
Adding hyperlink to existing image using Open XML SDK
我正在努力寻找一种简洁的方法来完成我想象中非常简单的事情...我有一个简单的现有 PowerPoint 演示文稿,其中包含一张幻灯片和一张图片。
我想使用 Open XML SDK(托管在 .Net Core Web 应用程序中)以编程方式打开它,并向其添加一个 hyperlink,然后保存...这样当它在 PowerPoint 中重新打开时,可以控制并单击图像以访问 link.
using (var ppt = PresentationDocument.Open("powerpoint.pptx", true))
{
var image = ppt.PresentationPart.SlideParts.First().ImageParts.First();
// Code to add hyperlink to image here - a bit like:
// image.HyperLink = "http://somewebpage"
ppt.Save();
}
感谢@Cindy Mester 的评论帮助,我能够将建议的迁移代码从 Open XML SDK Productivity Tool 中剥离为:
using (var ms = new MemoryStream())
{
var original = File.OpenRead("withoutlink.pptx");
original.CopyTo(ms);
using (var ppt = PresentationDocument.Open(ms, true))
{
var slidePart1 = ppt.PresentationPart.SlideParts.First();
var slide1 = slidePart1.Slide;
var commonSlideData1 = slide1.GetFirstChild<CommonSlideData>();
var shapeTree1 = commonSlideData1.GetFirstChild<ShapeTree>();
var picture1 = shapeTree1.GetFirstChild<Picture>();
var nonVisualPictureProperties1 = picture1.GetFirstChild<NonVisualPictureProperties>();
var nonVisualDrawingProperties1 =
nonVisualPictureProperties1.GetFirstChild<NonVisualDrawingProperties>();
var nonVisualDrawingPropertiesExtensionList1 = nonVisualDrawingProperties1
.GetFirstChild<A.NonVisualDrawingPropertiesExtensionList>();
var relationshipId = "rId" + nonVisualPictureProperties1.Count();
var hyperlinkOnClick1 = new A.HyperlinkOnClick {Id = relationshipId};
nonVisualDrawingProperties1.InsertBefore(hyperlinkOnClick1,
nonVisualDrawingPropertiesExtensionList1);
slidePart1.AddHyperlinkRelationship(new Uri("http://www.google.com/", UriKind.Absolute), true,
relationshipId);
ppt.SaveAs("withlink.pptx");
}
为了能够在不修改原始文件的情况下编辑文件,我将其复制到内存流并打开它 - 在我的网络应用程序中,我可以将此内存流流回客户端。
我正在努力寻找一种简洁的方法来完成我想象中非常简单的事情...我有一个简单的现有 PowerPoint 演示文稿,其中包含一张幻灯片和一张图片。
我想使用 Open XML SDK(托管在 .Net Core Web 应用程序中)以编程方式打开它,并向其添加一个 hyperlink,然后保存...这样当它在 PowerPoint 中重新打开时,可以控制并单击图像以访问 link.
using (var ppt = PresentationDocument.Open("powerpoint.pptx", true))
{
var image = ppt.PresentationPart.SlideParts.First().ImageParts.First();
// Code to add hyperlink to image here - a bit like:
// image.HyperLink = "http://somewebpage"
ppt.Save();
}
感谢@Cindy Mester 的评论帮助,我能够将建议的迁移代码从 Open XML SDK Productivity Tool 中剥离为:
using (var ms = new MemoryStream())
{
var original = File.OpenRead("withoutlink.pptx");
original.CopyTo(ms);
using (var ppt = PresentationDocument.Open(ms, true))
{
var slidePart1 = ppt.PresentationPart.SlideParts.First();
var slide1 = slidePart1.Slide;
var commonSlideData1 = slide1.GetFirstChild<CommonSlideData>();
var shapeTree1 = commonSlideData1.GetFirstChild<ShapeTree>();
var picture1 = shapeTree1.GetFirstChild<Picture>();
var nonVisualPictureProperties1 = picture1.GetFirstChild<NonVisualPictureProperties>();
var nonVisualDrawingProperties1 =
nonVisualPictureProperties1.GetFirstChild<NonVisualDrawingProperties>();
var nonVisualDrawingPropertiesExtensionList1 = nonVisualDrawingProperties1
.GetFirstChild<A.NonVisualDrawingPropertiesExtensionList>();
var relationshipId = "rId" + nonVisualPictureProperties1.Count();
var hyperlinkOnClick1 = new A.HyperlinkOnClick {Id = relationshipId};
nonVisualDrawingProperties1.InsertBefore(hyperlinkOnClick1,
nonVisualDrawingPropertiesExtensionList1);
slidePart1.AddHyperlinkRelationship(new Uri("http://www.google.com/", UriKind.Absolute), true,
relationshipId);
ppt.SaveAs("withlink.pptx");
}
为了能够在不修改原始文件的情况下编辑文件,我将其复制到内存流并打开它 - 在我的网络应用程序中,我可以将此内存流流回客户端。