【Openxml】如何为OpenXml元素创建超链接
已知在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文件,如图:

我们分别为四个形状插入超链接,代码如下:
internal class Program
{
static void Main(string[] args)
{
var mainExecuteDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var pptFilePath = Path.Combine(mainExecuteDirectory!, "YourPresentation.pptx");
// 打开一个PPTX文档
using PresentationDocument presentationDocument = PresentationDocument.Open(pptFilePath, true);
var slideIdList = presentationDocument.PresentationPart!.Presentation.SlideIdList;
if (slideIdList is null || !slideIdList.Any())
{
return;
}
var firstSlideId =(SlideId) slideIdList.First();
// 获取页面内容
var firstSlidePart = (SlidePart) presentationDocument.PresentationPart.GetPartById(firstSlideId.RelationshipId!.Value!);
//设置跳转到第三页
var targetSlideId = (SlideId) slideIdList.ChildElements[2];
var targetSlidePart = (SlidePart) presentationDocument.PresentationPart.GetPartById(targetSlideId.RelationshipId!.Value!);
var relationshipId = firstSlidePart.CreateRelationshipToPart(targetSlidePart);
var shapeElements = firstSlidePart.Slide.CommonSlideData!.ShapeTree!.Elements<Shape>().ToList();
//第一个形状设置跳转第三页
shapeElements[0]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
{
Action = PptAction.SlideJump,
Id = relationshipId
};
//第二个形状设置跳转下一页
var shapeElement = shapeElements[1];
shapeElement.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
{
Action = PptAction.JumpNextSlide,
};
var filePath = Path.Combine(mainExecuteDirectory!, "两只老虎-原声.mp3");
var fileHyperlinkRelationship = firstSlidePart.AddHyperlinkRelationship(new Uri(filePath, UriKind.Absolute), true);
//第三个形状设置打开文件
shapeElements[2]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
{
Action = PptAction.OpenFile,
Id = fileHyperlinkRelationship.Id
};
//第四个形状设置打开网页链接
var httpHyperlinkRelationship = firstSlidePart.AddHyperlinkRelationship(new Uri($"http://www.baidu.com", UriKind.Absolute), true);
shapeElements[3]!.NonVisualShapeProperties!.NonVisualDrawingProperties!.HyperlinkOnClick = new HyperlinkOnClick()
{
Id = httpHyperlinkRelationship.Id
};
// 保存并关闭文档
presentationDocument.Save();
}
}
public static class PptAction
{
/// <summary>
/// 跳转页面
/// </summary>
public const string SlideJump = "ppaction://hlinksldjump";
/// <summary>
/// 跳转下一页
/// </summary>
public const string JumpNextSlide = "ppaction://hlinkshowjump?jump=nextslide";
/// <summary>
/// 打开文件
/// </summary>
public const string OpenFile = "ppaction://hlinkfile";
}
效果如下:

源码
【Openxml】如何为OpenXml元素创建超链接的更多相关文章
- 如何在TextView类中创建超链接 Linkify
Linkify是一个辅助类,通过RegEx样式匹配,自动地在TextView类(和继承的类)中创建超链接.符合特定的RegEx样式的文本会被转变成可点击的超链接,这些超链接隐式的调用startActi ...
- JQ DOM元素 创建 添加 删除
创建元素 // 创建元素节点 $('<p></p>'); // 创建属性节点 $('<p class="wow"></p>'); / ...
- js,javascript,删除元素,创建元素,插入子元素
删除元素示例代码 <html> <head> </head> <body> <div> <div id="delId&quo ...
- 【Openxml】将Openxml的椭圆弧线arcTo转为Svg的椭圆弧线
本文将介绍如何将OpenXml的actTo转为Svg的弧线(a) OpenXml的artTo 首先下面是一段OpenXml的arcTo弧线 <arcTo wR="152403" ...
- 如何为RD网关创建自建签名的证书
创建安全的RD网关是一件非常好的事情,这样可以在公网环境下直接远程接入内部的已开启远程访问的主机服务器. 建立这个安全的RD网关需要的材料有RD网关本身,以及一个证书.由于一般情况下这些在RD网关后面 ...
- a标签创建超链接,利用a标签创建锚点
#Html今日学习内容 <!DOCTYPE html> <html> <head lang="en"> <meta charset ...
- Angular2 直接给元素指定超链接打开会带有 `unsafe` 字样导致数据不能加载
解决方法: 在 component 中引入 import { DomSanitizer } from "@angular/platform-browser";然后在构造函数中注入 ...
- poi操作Word创建超链接
项目引入poi: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ ...
- Ubuntu中如何为wine程序创建快捷方式
1.安装一个gnome组件及其应用 sudo apt-get install gnome-panel 2.运行以下命令弹出创建快捷方式的窗口 sudo gnome-desktop-item-edit ...
- 使用<bind>元素创建变量
在使用模糊查询sql时,如果使用${}进行字符拼接,无法防止sql诸如问题,如果使用concat函数则只对mysql有效果,用Oracle则需要用连接符||,这样在数据库变的时候需要修改,不利于移植. ...
随机推荐
- vuex4的简单使用
安装vuex cnpm install vuex@next --save 官网地址是 https://vuex.vuejs.org/zh/guide/#%E6%9C%80%E7%AE%80%E5%8D ...
- element-ui中Select 选择器列表内容居中
<el-select class="my-el-select" v-model="tenantCont" placeholder="请输入机构标 ...
- 获取Visual Studio所用MSVC编译器版本:_MSC_VER数值
本文介绍查看Visual Studio软件_MSC_VER值的方法. _MSC_VER是微软公司推出的C/C++编译器--MSVC编译器的一个内置宏,其值表示当前Visual Studio软件 ...
- C++编译器的RVO和NRVO
1.说明 我一直记得返回对象的函数在调用时会有拷贝构造动作,但是最近实际测试却和记忆有些偏差,经查询是编译的问题 RVO: return value optimization NRVO: named ...
- 物联网浏览器(IoTBrowser)-MQTT协议集成和测试
一.简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议.它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情 ...
- 创建大量栅格文件并分别写入像元数据:C++ GDAL代码实现
本文介绍基于C++语言GDAL库,批量创建大量栅格遥感影像文件,并将数据批量写入其中的方法. 首先,我们来明确一下本文所需实现的需求.已知我们对大量遥感影像进行了批量读取与数据处理操作--具体 ...
- 《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(上)
第 3 章 ASP.NET Core 核心特性 3.1 启动与宿主 ASP.NET Core 应用程序启动时,它首先会配置并运行其宿主,宿主主要用来启动.初始化应用程序,并管理其生命周期 ASP.NE ...
- Windows-Xshell对多个终端同时执行命令(发送命令到多个会话)
方法1:使用查看中的撰(zhuàn)写栏 (1).查看→撰写→撰写栏. (2).底部可以看到"撰写栏",选择全部会话. (3).在撰写栏输入命令,回车后就会发送到所有会话窗口. 方 ...
- 机器学习基础01DAY
数据的特征抽取 现实世界中多数特征都不是连续变量,比如分类.文字.图像等,为了对非连续变量做特征表述,需要对这些特征做数学化表述,因此就用到了特征提取. sklearn.feature_extract ...
- 2023年多校联训NOIP层测试6
2023年多校联训NOIP层测试6 打了 \(10min\) 骗分,就溜了. T1 弹珠游戏 \(0pts\) 没听懂讲评,暂时咕了. T2 晚会 \(20pts\) 部分分( \(20pts\) ) ...