我正在用apache poi xslf库创建一个Powerpoint演示文稿。我需要创建一个自动整形,当单击自动整形时,它应该转到特定的幻灯片。
我可以通过将文本添加到autoshape并创建一个如下所示的超链接来完成此操作。
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);但问题是,当我创建这样的Auto shape时,它实际上链接的是文本,而不是形状。此外,当我从Powerpoint打开它时,它显示了蓝色下划线文本的超链接,这是我不想要的。
在Powerpoint中,您可以右键单击自动形状,然后将其链接到不同的幻灯片。这将链接自动形状,如果您单击自动形状中的任何位置,它会将您带到链接的幻灯片,而且它不会以蓝色下划线格式显示文本。这就是我想要达到的效果。
我需要使用org.apache.poi.xslf库。我在org.apache.poi.hslf库中找到了一种类似的方法。但是我不能使用它,因为我需要XSLF库来实现其他一些特性。
如果有办法的话,请告诉我。
提前谢谢你。
发布于 2016-03-21 17:24:48
您可以将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;
}
}https://stackoverflow.com/questions/24040997
复制相似问题