首页 > 解决方案 > 如何使用 Apache POI 在 Word 文档中添加指向图像的超链接?

问题描述

在 Word 中,您可以通过右键单击图像并选择“链接...”来插入指向图像的超链接,如下所示:
Microsoft Word 中插入超链接功能的屏幕截图

如何使用 Apache POI 以编程方式执行此操作?

标签: javams-wordhyperlinkapache-poi

解决方案


在撰写本文时,没有可用的 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 以将其指向新的超链接。


推荐阅读