java - 使用 Java 从 DOCX 中删除物理图像
问题描述
我正在使用 apache poi 3.17 从模板生成 docx。在工作时,我将空白图像替换为必要的图像,将 CTDrawing 中的 relationId 替换为我自己的 id。这会在文档中留下未使用的图像文件。我想完全删除这些图像。
解决方案
在对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;
}
推荐阅读
- swift - 如果第二个小数位为 0,则会被截断
- python - 功能测试没有按预期进行(AoC 第 4 天的一部分)
- c++ - 为什么有时只需要包含标题?
- javascript - 如何从 React 函数访问输入元素
- ubuntu - 这是在 Ubuntu 20.04 上分发 Ansible 的正确方法吗?
- wordpress - WordPress 恶意软件/top:0;左:-9999px URL
- python - 通过 Python 在 SQL 查询中使用通配符和特殊字符
- python - 如何在kivy中短时间显示标签?
- reactjs - 如何让 React 将数字附加到变量?
- python - 如何绘制具有不同内核的 SVM 的决策边界?(3个类,3个特征)