使用Apache POI XSLF尝试setFillColor时出现IllegalStateException

Kap*_*ain 7 apache-poi xslf

我正在尝试使用Apache POI XSLF库为pptx文件设置背景填充颜色.我的代码看起来像这样:

XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0);
XSLFSlideLayout layout = defaultMaster.getLayout(SlideLayout.BLANK);
XSLFBackground background = layout.getBackground();
background.setFillColor(Color.BLACK);
Run Code Online (Sandbox Code Playgroud)

结果

Exception in thread "main" java.lang.IllegalStateException: CTShapeProperties was not found.
at org.apache.poi.xslf.usermodel.XSLFShape.getSpPr(XSLFShape.java:240)
at org.apache.poi.xslf.usermodel.XSLFSimpleShape.setFillColor(XSLFSimpleShape.java:549)
Run Code Online (Sandbox Code Playgroud)

我试过在SlideMaster的背景,布局的背景和幻灯片的背景上调用它,都会导致同样的错误.

kiw*_*ngs 1

这个问题已通过#59702在POI 3.15-beta2中修复。

OOXml 属性或 POI 实现或 xmlbeans 模式的“问题”是,类似的属性(如颜色)存储在不同的模式类型下,而旧代码没有覆盖该父节点。该补丁引入了委托来包装这些差异,并且 XSLF 用户模型方法现在可以更加统一。