我想用实际文本替换docx
中的内容控件(仅下拉列表),然后在文档上应用一些逻辑以使用apache-poi
提取表。如果我不这样做,则不会提取具有内容控制的单元格。
如果我将docx
手动保存为Word 97-2003(*.doc
),那么它会要求删除所有内容控件并将其替换为所选文本,因此我计划将docx
转换为doc
摆脱内容控件。
到目前为止,我已经探索了:
Aspose.words
库,但该库是付费的,并且可以
只需3行代码即可完成工作(已通过试用版测试)。POI
,但不知道该怎么做。我尝试了以下代码: XWPFDocument doc = new XWPFDocument(new FileInputStream("<DOCX_FILE_PATH>"));
FileOutputStream fos = new FileOutputStream("<PATH_FOR_DOC_FILE>");
doc.write(fos);
fos.close();
它确实创建了文档文件,但没有像aspose
那样删除内容控件。
JODConverter
,因为它依赖于LibreOffice
或OpenOffice
-我们在服务器上没有它,也没有安装新软件的许可。 Docx4J
,但似乎在检查了API后无法执行。什么是处理这种情况的最佳方法,有什么方法可以直接替换内容控件?谢谢!
答案 0 :(得分:1)
docx4j可以删除内容控件
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);