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


我遇到了doc库,但该库是付费的,可以执行
仅用3行代码即可完成工作(已通过试用版测试)。
我尝试了Aspose.words本身,但不知道该怎么做。我尝试下面的代码:


POI

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


它确实创建了doc文件,但没有像XWPFDocument doc = new XWPFDocument(new FileInputStream("<DOCX_FILE_PATH>"));那样删除内容控件。


我现在限制尝试aspose,因为它依赖于JODConverterLibreOffice-我们在服务器上没有它,也没有安装新软件的许可。
我调查了OpenOffice,但在检查了其API之后,看起来似乎无法执行。


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

最佳答案

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);

09-27 06:42