Я нашел здесь пример, который пересекает существующий файл docx и печатает его необработанный XML на стандартном выводе. Я хотел бы преобразовать такой пример в фрагмент кода, который копирует документ при его обходе в новый файл, а не просто выводит его на стандартный вывод. Моя цель в конечном итоге скопировать его с некоторыми предписанными добавлениями текста.
Я не знаю точно, как изменить приведенный ниже фрагмент кода, чтобы воссоздать элементы в новом WordprocessingMLPackage, когда они встречаются в исходном.
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 не сможет ее открыть.