CommentRemover.java

package pro.verron.officestamper.api;

import org.docx4j.TraversalUtil;
import org.docx4j.finders.CommentFinder;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.Comments;
import org.docx4j.wml.ContentAccessor;
import org.jvnet.jaxb2_commons.ppp.Child;

public class CommentRemover
        implements PostProcessor {
    @Override
    public void process(WordprocessingMLPackage document) {
        var visitor = new CommentFinder();
        TraversalUtil.visit(document.getMainDocumentPart(), visitor);

        // Replaces tags with their content in parent
        for (Child commentElement : visitor.getCommentElements()) {
            var parent = (ContentAccessor) commentElement.getParent();
            var siblings = parent.getContent();
            siblings.remove(commentElement);
        }

        var mainDocumentPart = document.getMainDocumentPart();
        if (mainDocumentPart == null) return;

        var commentsPart = mainDocumentPart.getCommentsPart();
        if (commentsPart == null) return;

        Comments commentsPartContents;
        try {
            commentsPartContents = commentsPart.getContents();
        } catch (Docx4JException e) {
            throw new OfficeStamperException(e);
        }

        if (commentsPartContents == null) return;
        var comments = commentsPartContents.getComment();

        if (comments == null) return;
        comments.clear();
    }
}