java ppt替换图片,图片重复bug

212 阅读1分钟

bug描述: ppt模板中包含多张图片,用poi方法替换图片时,替换后所有图片都是同一张图片。

bug原因:ppt模板中的多张图片就是相同。

bug解决: ppt模板中插入不同的图片即可。 核心代码:

/**
 * @param inputStream    模版ppt的输入流
 * @param replacementMap 需要替换的文字,格式为{ "{{标题}}": "真正的标题" }
 * @return 替换后的ppt流
 */
public InputStream replaceTextInPPT(InputStream inputStream, Map<String, Object> replacementMap) throws IOException {
    //创建Presentation对象
    try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
        // 创建 SlideShow 对象
        SlideShow slideShow = new XMLSlideShow(inputStream);
        // 遍历所有幻灯片
        for (Object slideObj : slideShow.getSlides()) {
            Slide slide = (Slide) slideObj;
            // 遍历幻灯片中的所有形状
            List<Shape> shapes = slide.getShapes();
            List<Shape> delShapes = new ArrayList<>();

            for (Shape shape : shapes) {
                if (shape instanceof PictureShape) {
                    String shapeName = shape.getShapeName();
                    XSLFPictureShape pictureShape = (XSLFPictureShape) shape;
                    byte[] bytes = null;
                    // TODO 这是是获取图片的逻辑
                    if (bytes != null) {
                        pictureShape.getPictureData().setData(bytes);
                    } else {
                        delShapes.add(shape);
                    }
                }
            }
            for (Shape delShape : delShapes) {
                slide.removeShape(delShape);
            }
        }
        // 保存修改到输出流
        slideShow.write(outputStream);
        return new ByteArrayInputStream(outputStream.toByteArray());
    } catch (IOException e) {
        log.error("PPTX填充失败", e);
    }
}

有问题的PPT模板(这里的图片不能相同,否则提换后也都是同一张):

微信截图_20250204235640.png