翼度科技»论坛 编程开发 .net 查看内容

【Openxml】如何为OpenXml元素创建超链接

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
已知在OpenXml有以下几种超链接

功能说明跳转页面跳转某一页:ppaction://hlinksldjump
跳转第一页:ppaction://hlinkshowjump?jump=firstslide
跳转最后一页:ppaction://hlinkshowjump?jump=lastslide
跳转下一页:ppaction://hlinkshowjump?jump=nextslide
跳转上一页:ppaction://hlinkshowjump?jump=previousslide跳转文件跳转打开本地文件:ppaction://hlinkfile
跳转打开Office支持的主流文档类文件(office系文档、pdf、txt...):ppaction://hlinkpres?slideindex=1&slidetitle=跳转网页
例子

我们先准备好这样一份pptx文件,如图:

我们分别为四个形状插入超链接,代码如下:
  1.     internal class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             var mainExecuteDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  6.             var pptFilePath = Path.Combine(mainExecuteDirectory!, "YourPresentation.pptx");
  7.             // 打开一个PPTX文档
  8.             using PresentationDocument presentationDocument = PresentationDocument.Open(pptFilePath, true);
  9.             var slideIdList = presentationDocument.PresentationPart!.Presentation.SlideIdList;
  10.             if (slideIdList is null || !slideIdList.Any())
  11.             {
  12.                 return;
  13.             }
  14.             var firstSlideId =(SlideId) slideIdList.First();
  15.             // 获取页面内容
  16.             var firstSlidePart = (SlidePart) presentationDocument.PresentationPart.GetPartById(firstSlideId.RelationshipId!.Value!);
  17.             //设置跳转到第三页
  18.             var targetSlideId = (SlideId) slideIdList.ChildElements[2];
  19.             var targetSlidePart = (SlidePart) presentationDocument.PresentationPart.GetPartById(targetSlideId.RelationshipId!.Value!);
  20.             var relationshipId = firstSlidePart.CreateRelationshipToPart(targetSlidePart);
  21.             var shapeElements = firstSlidePart.Slide.CommonSlideData!.ShapeTree!.Elements<Shape>().ToList();
  22.             //第一个形状设置跳转第三页
  23.             shapeElements[0]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
  24.             {
  25.                 Action = PptAction.SlideJump,
  26.                 Id = relationshipId
  27.             };
  28.             //第二个形状设置跳转下一页
  29.             var shapeElement = shapeElements[1];
  30.             shapeElement.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
  31.             {
  32.                 Action = PptAction.JumpNextSlide,
  33.             };
  34.             var filePath = Path.Combine(mainExecuteDirectory!, "两只老虎-原声.mp3");
  35.             var fileHyperlinkRelationship = firstSlidePart.AddHyperlinkRelationship(new Uri(filePath, UriKind.Absolute), true);
  36.             //第三个形状设置打开文件
  37.             shapeElements[2]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
  38.             {
  39.                 Action = PptAction.OpenFile,
  40.                 Id = fileHyperlinkRelationship.Id
  41.             };
  42.             //第四个形状设置打开网页链接
  43.             var httpHyperlinkRelationship = firstSlidePart.AddHyperlinkRelationship(new Uri($"http://www.baidu.com", UriKind.Absolute), true);
  44.             shapeElements[3]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
  45.             {
  46.                 Id = httpHyperlinkRelationship.Id
  47.             };
  48.             // 保存并关闭文档
  49.             presentationDocument.Save();
  50.         }
  51.     }
  52.     public static class PptAction
  53.     {
  54.         /// <summary>
  55.         /// 跳转页面
  56.         /// </summary>
  57.         public const string SlideJump = "ppaction://hlinksldjump";
  58.         /// <summary>
  59.         /// 跳转下一页
  60.         /// </summary>
  61.         public const string JumpNextSlide = "ppaction://hlinkshowjump?jump=nextslide";
  62.         /// <summary>
  63.         /// 打开文件
  64.         /// </summary>
  65.         public const string OpenFile = "ppaction://hlinkfile";
  66.     }
复制代码
效果如下:


源码

源码链接

来源:https://www.cnblogs.com/ryzen/p/18047555
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具