我正在努力想出一个简洁的方法去做我想象的很简单的事情......我有一个简单的现有PowerPoint演示文稿,其中有一张幻灯片,其中有一张图片。
我想用Open XML SDK(托管在.Net Core Web应用程序中)以编程方式打开它,并为此添加一个超链接,并将其保存...这样当它在PowerPoint中重新打开时,可以控制+点击图片访问链接。
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();
}
答案 0 :(得分:0)
感谢@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");
}
为了能够编辑文件而不修改我复制到内存流的原始文件并打开它 - 在我的Web应用程序中,我可以将此内存流传输回客户端。