当前位置: 首页 > 知识库问答 >
问题:

在使用docx4j遍历docx文件的同时复制(和修改)docx文件

鲜于喜
2023-03-14
new TraversalUtil(body,
            new Callback() {
              String indent = "";
              @Override
              public List<Object> apply(Object o) {
                String wrapped = "";
                if (o instanceof JAXBElement)
                  wrapped =  " (wrapped in JAXBElement)";
                o = XmlUtils.unwrap(o);
                String text = "";
                if (o instanceof org.docx4j.wml.Text)
                  text = ((org.docx4j.wml.Text) o).getValue();
                System.out.println(indent + o.getClass().getName() + wrapped + "  \""
                        + text + "\"");
                return null;
              }
              // other code
            } // end of Callback(){ ... }
);

我还尝试了另一种方法:修改原始XML、解压缩docx并操作文件“word/document.XML”。当我压缩回解压缩的文件夹并将其重命名为docx时,MS Word无法打开它。

共有1个答案

赏弘
2023-03-14

复制对象很容易;您可以使用xmlutils.deepcopy:https://github.com/plutext/docx4j/blob/master/docx4j-core/src/main/java/org/docx4j/xmlutils.java#l1022

但是,WordML的许多部分与XML文件的其他部分具有隐式或显式的正式关系,您需要设法获得预期的结果。参见https://www.docx4java.org/blog/2010/11/merging-word-documents/

例如,如果对象引用一个图像,则需要包含该图像。如果段落引用了缺少的样式,则该段落将取消样式化。等

 类似资料: