美文网首页
docx4j操作文档 三替换图片

docx4j操作文档 三替换图片

作者: antlove | 来源:发表于2021-04-22 05:55 被阅读0次

准备文档如下


image.png
import org.apache.commons.io.FileUtils;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.Part;
import org.docx4j.openpackaging.parts.PartName;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import java.io.*;
import java.util.Collection;
import java.util.zip.CRC32;
import java.util.zip.Checksum;

public class ImageReplacement {
    public static void main(String[] args) throws Exception {
        File source = getFileFromUserDir("/template/template.docx");
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(source);
        MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
        // 1610171220 为约定好的图片CheckSum数值
        BinaryPartAbstractImage imagePart = findBinaryPartAbstractImageByChecksum(1610171220, wordMLPackage);
        PartName partName = imagePart.getPartName();
        String rid = documentPart.getRelationshipsPart().getRel(partName).getId();
        documentPart.getRelationshipsPart().removePart(partName);
        BinaryPartAbstractImage insertImagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, getInsertImage());
        insertImagePart.getRels().get(0).setId(rid);
        wordMLPackage.addTargetPart(insertImagePart);
        wordMLPackage.save(new java.io.File("out.docx"));
    }

    private static File getFileFromUserDir(String path) {
        String dir = System.getProperty("user.dir");
        return new File(dir + path);
    }
    private static byte[] getInsertImage() throws IOException {
        File file =  getFileFromUserDir("/images/replacement.jpeg");
        return FileUtils.readFileToByteArray(file);
    }

    private static BinaryPartAbstractImage findBinaryPartAbstractImageByChecksum(long sum, WordprocessingMLPackage wordMLPackage) {
        Collection<Part> parts = wordMLPackage.getParts().getParts().values();
        for (Part part : parts) {
            if (part instanceof BinaryPartAbstractImage) {
                BinaryPartAbstractImage imagePart = (BinaryPartAbstractImage) part;
                byte[] bytes = imagePart.getBytes();
                if (isCheckSumEqual(sum, bytes)) {
                    return imagePart;
                }
            }
        }
        return null;
    }

    private static boolean isCheckSumEqual(long sum, byte[] bytes) {
        Checksum crc32 = new CRC32();
        crc32.update(bytes, 0, bytes.length);
        return crc32.getValue() == sum;
    }
}

输出如下


image.png

相关文章

  • docx4j操作文档 三替换图片

    准备文档如下 输出如下

  • Docx4j导出latex公式到word(公式可编辑)

    环境 核心代码 依赖项 docx4j:操作word文档(.docx) latex-word(第三方jar包):将l...

  • 19、python操作 SQLSERVER数据库和有关HTML

    python操作 SQLSERVER数据库基础教程 HTML img图片加载失败时用默认图片替换 参考文档:htt...

  • docx4j操作文档 二替换文本

    准备文档如下 输出如下 word文档格式复杂,使用以上方式替换文本需特别注意,使用时建议做测试

  • [Unity3D]MaterialPropertyBlock

    学习文档:使用MaterialPropertyBlock来替换Material属性操作 上面文档没说到的用法 学习...

  • JQuery-DOM操作

    转载请注明出处DOM操作:即文档对象模型操作。html是一个文档。 创建、删除、复制、插入、替换、包裹节点。 创建...

  • css文档

    1. 元素 1.1 替换元素和非替换元素 替换元素: 它会被存储在文档外部的一个图片文件所替代。 非替换元素:...

  • word30

    题目 1.①将文档“样式”中的标题123替换word文档中同名样式-----打开的是word文档操作,右边选择导入...

  • 2017-3-16(DOM操作)

    DOM [document object model] 文档对象模型,操作[获取/新增插入/删除/修改/复制/替换...

  • IOS 实现图文混排

    一、从本地获取txt文档 二、对textView文档进行操作 三、设置图片为附件加入可变文本当中去

网友评论

      本文标题:docx4j操作文档 三替换图片

      本文链接:https://www.haomeiwen.com/subject/eaealltx.html