我使用apache poi 3.17从模板生成docx。在工作时,我用必要的图像替换空白图像,用我自己的id替换CTDrawing中的relationId。这将在文档中留下未使用的图像文件。我想完全删除这些图像。
在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;
}