如何使用 Apache POI 在 Word 文档中添加指向图像的超链接?
How to add a hyperlink to image in a Word document using Apache POI?
在 Word 中,您可以通过右键单击图像并选择“Link...”来插入指向图像的超链接,如下所示:
如何使用 Apache POI 以编程方式执行此操作?
截至撰写本文时,Apache POI library 的最新可用版本 (4.1.2) 无法 API 向图像添加超链接。
因此,唯一的办法就是使用底层对象直接操作文档的XML结构。
超链接作为文档对象上的关系存在,因此首先要做的是在文档对象上创建新关系:
String relationshipId = paragraph.getDocument().getPackagePart()
.addExternalRelationship(url, XWPFRelation.HYPERLINK.getRelation()).getId();
之后,从 XWPFRun
中检索 CTDrawing
对象,并插入一个新的 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 以将其指向新的超链接。
在 Word 中,您可以通过右键单击图像并选择“Link...”来插入指向图像的超链接,如下所示:
如何使用 Apache POI 以编程方式执行此操作?
截至撰写本文时,Apache POI library 的最新可用版本 (4.1.2) 无法 API 向图像添加超链接。
因此,唯一的办法就是使用底层对象直接操作文档的XML结构。
超链接作为文档对象上的关系存在,因此首先要做的是在文档对象上创建新关系:
String relationshipId = paragraph.getDocument().getPackagePart()
.addExternalRelationship(url, XWPFRelation.HYPERLINK.getRelation()).getId();
之后,从 XWPFRun
中检索 CTDrawing
对象,并插入一个新的 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 以将其指向新的超链接。