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

打印 上一主题 下一主题

主题 870|帖子 870|积分 2610

已知在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.     }
复制代码
效果如下:


源码

源码链接

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表