从 Docx 中删除内容控件

Removing content controls from Docx

我想用实际文本替换 docx 中的内容控件(仅限下拉列表),然后在文档上应用一些逻辑以使用 apache-poi 提取表格。如果我不这样做,则不会提取具有内容控制的单元格。 如果我手动将 docx 保存为 Word 97-2003(*.doc) 然后它会要求删除所有内容控件并将其替换为选中的文本所以我打算将 docx 转换为doc 摆脱内容控制。 到目前为止我已经探索过:

XWPFDocument doc = new XWPFDocument(new FileInputStream("<DOCX_FILE_PATH>"));

FileOutputStream fos = new FileOutputStream("<PATH_FOR_DOC_FILE>");
doc.write(fos);
fos.close();

它确实创建了 doc 文件,但没有像 aspose 那样删除内容控件。

处理这种情况的最佳方法是什么,有什么方法可以直接替换内容控件吗?谢谢!

docx4j 可以删除内容控件

https://github.com/plutext/docx4j/blob/master/docx4j-samples-docx4j/src/main/java/org/docx4j/samples/ContentControlRemove.java处的示例代码精华转载如下:

    String input_DOCX = System.getProperty("user.dir") + "/some.docx";

    // resulting docx
    String OUTPUT_DOCX = System.getProperty("user.dir") + "/OUT_ContentControlRemove.docx";

    // Load input_template.docx
    WordprocessingMLPackage wordMLPackage = Docx4J.load(new File(input_DOCX));

    // There is no xml stream
    FileInputStream xmlStream = null;

    Docx4J.bind(wordMLPackage, xmlStream, Docx4J.FLAG_BIND_REMOVE_SDT);

    //Save the document 
    Docx4J.save(wordMLPackage, new File(OUTPUT_DOCX), Docx4J.FLAG_NONE);