当我从头开始创建图表并将其添加到使用 Apache Poi 的 PowerPoint 中的幻灯片时,XSLFGraphicFrame
会创建相应的形状并将其添加到 XML 中,但它不会添加到getShapes()
幻灯片中的列表中,其他情况会正确发生形状类型,有没有办法将依赖树提升到GraphicalFrame
并获取相应的XSLFShape
对象并手动添加它?
示例:
假设我有一个XMLSlideShow
我们称之为 ppt 的对象,ppt 有一个XSLFSLide
对象表示它在第一个位置的幻灯片。所以现在这张幻灯片有一些形状。假设这些是 2 个 XSLFTextBox,我们可以使用方法对其进行迭代getShapes()
。
因此,如果我们从头开始创建图表:
//ppt.getSlides().get(0).getShapes().foreach .... sysout of each shapes produce something like shape1, shape2 we assumed before
XSLFChart chart = ppt.createChart(ppt.getSlides().get(0); //so adding the relation part to the first slide of our ppt
ppt.getSlides().get(0).addChart(chart, anchor); // we add the chart to the slide at some anchor we r interesting at
//now here do all things you need to populate your chart with data
//now ppt.getSlides().get(0).getShapes(). foreach .... sysout of this still produce shape1, shape2 and exclude shape3 (the actual just created chart)
但是,如果我们遍历 XML 对象 bean,我们实际上可以找到似乎没有添加到 getShapes 列表中的图形框架对象。
如何通过首先获取相应的形状来手动执行此操作?
编辑:我设法通过变通方法解决了这个问题,因为编辑源代码和用 ant+gradle 等重建 lib 的工作量太大。ppt 可以从流中加载,这是通过读取 xml 来完成的文件,它正确列出了图形框架。我在 ByteArrayOutputStream 中编写了 ppt 并从字节数组的输入流中重新加载它;这解决了问题。