Java 从Docx中删除内容控件
我想用实际文本替换Java 从Docx中删除内容控件,java,apache-poi,docx4j,Java,Apache Poi,Docx4j,我想用实际文本替换docx中的内容控件(仅下拉列表),然后在文档上应用一些逻辑,使用apachepoi提取表。如果我不这样做,那么具有内容控制的单元格就不会被提取。 如果我手动将我的docx保存为Word 97-2003(*.doc),则它会要求删除所有内容控件并将其替换为所选文本,因此我计划将docx转换为doc,以摆脱内容控件。 到目前为止,我已经探索过: 我偶然发现了一个Aspose.wordslibrary,但它是付费的,可以做很多事情 只需3行代码即可完成作业(使用试用版进行测试)
docx
中的内容控件(仅下拉列表),然后在文档上应用一些逻辑,使用apachepoi
提取表。如果我不这样做,那么具有内容控制的单元格就不会被提取。
如果我手动将我的docx
保存为Word 97-2003(*.doc
),则它会要求删除所有内容控件并将其替换为所选文本,因此我计划将docx
转换为doc
,以摆脱内容控件。
到目前为止,我已经探索过:
- 我偶然发现了一个
library,但它是付费的,可以做很多事情 只需3行代码即可完成作业(使用试用版进行测试)Aspose.words
- 我尝试了
本身,但不知道如何准确地做到这一点。我尝试了以下代码:POI
XWPFDocument doc=newxwpfdocument(newfileinputstream(“”)代码>
FileOutputStream fos=newfileoutputstream(“”);
文件编写(fos);
fos.close();
它确实创建了文档文件,但没有像在aspose
中那样删除内容控件
- 我暂时限制尝试
JODConverter
,因为它依赖于LibreOffice
或OpenOffice
——我们在服务器上没有它,也没有安装新软件的权限
- 我查看了
Docx4J
,但在检查了它的API之后,它似乎无法做到这一点
处理这种情况的最佳方法是什么?有没有直接替换内容控件的方法?谢谢 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);
你能帮我指出我遗漏了什么吗?我确实探索过,但不明白。你并没有具体说明你错过了什么,你只是说你“不知道如何准确地做”。我可能可以在互联网上搜索一些资源,但我不确定这是否是获取书籍/资源的最佳地点。更新问题,谢谢。在来这里之前,我会更加清楚,并正确地浏览资源。我可能也会将标题更改为“使用POI删除内容控件”或类似的内容。谢谢你改变问题!现在更新主题:)
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);