当前位置: 首页 > 知识库问答 >
问题:

向apache添加超链接。波伊。xslf自选图形

郭逸清
2023-03-14

我正在用apache poi xslf库创建一个Powerpoint演示文稿。我需要创建一个自动形状,当单击自动形状时,它应该转到特定的幻灯片。

我可以通过向自动形状添加文本并创建如下所示的超链接来做到这一点。

XMLSlideShow ppt = new XMLSlideShow();
XSLFSlide slide1 = ppt.createSlide();
XSLFSlide slide2 = ppt.createSlide();
XSLFSlide slide3 = ppt.createSlide();
XSLFAutoShape sh1 = slide1.createAutoShape();
sh1.setAnchor(new Rectangle(100, 50, 100, 50));
XSLFTextRun r2 = sh1.addNewTextParagraph().addNewTextRun();
XSLFHyperlink link2 = r2.createHyperlink();
r2.setText("Go to Slide 3");
link2.setAddress(slide3);

但问题是,当我创建这样一个自动形状时,它实际上链接文本而不是形状。此外,当我从Powerpoint打开它时,它会以蓝色下划线的文本显示超链接,我不想这样做。

在Powerpoint中,您可以右键单击自动形状,然后将其链接到另一张幻灯片。这将链接自动形状,如果您单击自动形状中的任何位置,它会将您带到链接的幻灯片,并且它不会以蓝色下划线格式显示文本。这就是我试图实现的效果。

我需要使用org.apache.poi.xslf库。我在org.apache.poi.hslf库中找到了做类似事情的方法。但是我不能使用它,因为我需要XSLF库来实现其他一些功能。

如果有办法,请告诉我。

提前谢谢你。

共有1个答案

东郭和光
2023-03-14

您可以将AutoShape链接到特殊幻灯片,因此您必须使用自己的逻辑:

CTShapeNonVisual shapeProperty = XmlObjectReaderUtil.getElementValue(sh1.getXmlObject(), CTShapeNonVisual.class, XmlObjectReaderUtil.NEW_CT_SHAPE_NON_VISUAL);
CTNonVisualDrawingProps cNvPr = shapeProperty.getCNvPr();
CTHyperlink hlinkClick = cNvPr.getHlinkClick();
if (hlinkClick == null) {
  hlinkClick = cNvPr.addNewHlinkClick();
}
PackageRelationship rel = autoShape.getSheet()
                   .getPackagePart()
                   .addRelationship(slide3.getPackagePart().getPartName(),
                            TargetMode.INTERNAL,
                            XSLFRelation.SLIDE.getRelation());
hlinkClick.setId(rel.getId());
hlinkClick.setAction("ppaction://hlinksldjump");

//Helper class
public final class XmlObjectReaderUtil {

  public static final String NEW_CT_SHAPE_NON_VISUAL = "declare namespace main='http://schemas.openxmlformats.org/presentationml/2006/main' main:nvSpPr";

  private XmlObjectReaderUtil() {
    //Static-Service Class
  }

  @SuppressWarnings("unchecked")
  public static <T extends XmlObject> T getElementValue(XmlObject xmlObject, Class<T> clazz, String xquery) {
    XmlObject[] rs = xmlObject.selectPath(xquery);
        if (rs.length == 0) {
          return null;
        }
        return (clazz.isInstance(rs[0])) ? (T)rs[0] : null;
  }
}
 类似资料:
  • 我使用Microsoft Excel2007。我在第一个excel表上有一个简单的形状。我想在这个简单的形状上添加一个超链接,它引用了特定行和列上的另一个工作表。我对此进行了研究,但我只找到了演示如何向给定单元格添加超链接的示例。如何在Apache POI的帮助下向给定的简单形状添加超链接?

  • 我目前在按钮按钮上用于“显示当天报价”的脚本缺少一个功能:链接支持= 仅仅添加一个普通的“href”不起作用,它只显示为文本。 还有别的办法吗?

  • 有什么想法如何添加一个超链接在一个网页上使用这个库? 我发现了这个问题:如何使用pdfbox在内容中设置超链接,但这不起作用。 我只想在pdf文件的第一页添加一个超链接。 我更喜欢在页面底部添加以URL为中心的超链接。但目前任何建议都有帮助

  • ApachePOI项目解释了如何从powerpoint幻灯片中读取形状http://poi.apache.org/slideshow/xslf-cookbook.html#GetShapes 但是,我找不到任何关于如何使用库的这一部分向powerpoint幻灯片添加形状的文档。如果我使用旧的powerpoint格式(ppt而不是pptx),我可以使用图书馆的hslf部分,并执行以下操作: 如何使用

  • 我正在使用ApachePOI库用Java创建powerpoint幻灯片。我们的客户对嵌入式文本、图像和视频感兴趣。现在不需要像图表等花哨的东西。我知道XSLF仍在开发中,还不是一个成熟的产品。 我使用ApachePOI HSLF模型实现了我的目标,但它唯一缺少的是嵌入的视频不会显示任何播放控件。在做了一些研究之后,我发现是pptx和ppt文件标准让事情变得不同。现在为了解决这个问题,我将从HSLF

  • 问题内容: 这是我用于在Excel中将图像作为图标插入的方法: 这是我使用此方法创建图标的方法: 是否可以在此图标中放置一个超链接以转到同一电子表格中的另一个工作表或网站? 我读到的内容显然没有POI支持,但是可以使用底层的低级API来实现。但是我还不能真正成功地使用它。 有什么建议? 问题答案: 如果只支持可以,那么实际上可以使用底层的低级对象来完成。 如何开始?使用其中包含超链接的图片来创建工