使用Apache POI获取PPT图片文件名不正确,如何获取自定义图片名或ID
问题根因
你调用
XSLFPictureData.getFileName()获取的是PPT文件包内嵌入的媒体资源默认命名,和你在PowerPoint选择面板中修改的形状自定义名称属于两个完全独立的属性,所以无法通过这个方法拿到自定义值。
正确实现方式
获取自定义图片名称
你需要遍历幻灯片内的形状,筛选出图片类型的形状,直接读取形状名称即可,代码示例如下:
// 遍历所有幻灯片 for (XSLFSlide slide : ppt.getSlides()) { // 遍历幻灯片内所有形状 for (XSLFShape shape : slide.getShapes()) { // 筛选图片形状 if (shape instanceof XSLFPictureShape) { // JDK16以下版本需要手动强转:XSLFPictureShape picShape = (XSLFPictureShape) shape; XSLFPictureShape picShape = (XSLFPictureShape) shape; // 拿到选择面板自定义的图片名称 String customPicName = picShape.getShapeName(); // 如果需要同时拿到对应图片的二进制资源 XSLFPictureData picData = picShape.getPictureData(); byte[] picBytes = picData.getData(); } } }
获取图片唯一ID
PPT中每个形状都有文档全局唯一的整数ID,可以通过以下方式获取:
if (shape instanceof XSLFPictureShape) { XSLFPictureShape picShape = (XSLFPictureShape) shape; // 获取形状唯一ID,文档内不重复 int shapeUniqueId = picShape.getCNvPr().getId(); }
注意事项
- 如果同一个图片资源被多次插入到PPT中,会对应多个
XSLFPictureShape实例,各自有独立的自定义名称和唯一ID,但共享同一个XSLFPictureData资源 - 如果你需要关联自定义名称和媒体资源,需要在遍历形状时自行建立两者的映射关系
内容的提问来源于stack exchange,提问作者Laetitia O
相关产品推荐
相关产品推荐

