首页 > 解决方案 > 使用 Java 从 DOCX 中删除物理图像

问题描述

我正在使用 apache poi 3.17 从模板生成 docx。在工作时,我将空白图像替换为必要的图像,将 CTDrawing 中的 relationId 替换为我自己的 id。这会在文档中留下未使用的图像文件。我想完全删除这些图像。

标签: javaapache-poi

解决方案


在对apache poi的源代码进行了一些挖掘之后,我找到了自己替换图像的最佳方法。

private boolean replace_image(XWPFDocument docx, String img_to_replace, String img_source)
    {
        try {
            if (!new File(img_source).exists()) 
                return false;
            List<XWPFPictureData> doc_pics = docx.getAllPictures();
            for(XWPFPictureData cur_pic : doc_pics)
            {   
                if (!cur_pic.getFileName().equals(img_to_replace))
                    continue;
                PackagePart pic_package_part = cur_pic.getPackagePart();
                byte [] picbytes = IOUtils.toByteArray(new FileInputStream(img_source));
                try (OutputStream outputStream = pic_package_part.getOutputStream()){
                    outputStream.write(picbytes);
                } 
                catch (Exception e)
                {
                    return false;
                }
                return true;
            }
        } 
        catch (Exception e) 
        {
            return false;
        }
        
        
        return false;
    }

推荐阅读