java - 如何使用 Apache POI 在 Word 文档中添加指向图像的超链接?
解决方案
在撰写本文时,没有可用的 API 可通过Apache POI 库的最新可用版本 (4.1.2)来向图像添加超链接。
因此,唯一的方法是使用底层对象直接操作文档的 XML 结构。
超链接作为文档对象上的关系存在,所以首先要做的是在文档对象上创建一个新的关系:
String relationshipId = paragraph.getDocument().getPackagePart()
.addExternalRelationship(url, XWPFRelation.HYPERLINK.getRelation()).getId();
之后,CTDrawing
从 中检索对象XWPFRun
,并插入一个新对象CTHyperlink
以在图像上设置超链接:
if (run.getCTR().getDrawingList() != null && !run.getCTR().getDrawingList().isEmpty()) {
CTDrawing ctDrawing = run.getCTR().getDrawingList().get(0);
if (ctDrawing.getInlineList() != null && !ctDrawing.getInlineList().isEmpty()) {
CTInline ctInline = ctDrawing.getInlineList().get(0);
CTNonVisualDrawingProps docPr = ctInline.getDocPr();
if (docPr != null) {
org.openxmlformats.schemas.drawingml.x2006.main.CTHyperlink hlinkClick = docPr.addNewHlinkClick();
hlinkClick.setId(relationshipId);
}
}
}
如果CTHyperlink
对象已经存在,您可以在对象上设置 id 以将其指向新的超链接。
推荐阅读
- javascript - Flutter web:试图调用一个非函数,比如null: 'dart.global.myFunction'
- c# - Selenium 等到使用 Element 而不是 By
- c# - 如何从 C# 中的 .so 文件调用外部 C 函数?
- android - 使用 MultiDex 时 getApplicationContext 为空
- php - 用动态规划解决多项选择背包(MCKP)?
- reactjs - 使用 React.js 实现 SSR 的正确方法
- python - 为什么在 OpenCV Python 中按位发送错误?
- c# - C# 返回(动态还是匿名?)对象,具有来自其他方法的返回值作为属性
- xml - 定义我的 sympleTypes 给出“类型未声明,或者不是简单类型”
- testing - TestCafe 使用 --ssl 命令抛出 Mac 验证失败错误