Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Docx中删除内容控件_Java_Apache Poi_Docx4j - Fatal编程技术网

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
,以摆脱内容控件。 到目前为止,我已经探索过:

  • 我偶然发现了一个
    Aspose.words
    library,但它是付费的,可以做很多事情 只需3行代码即可完成作业(使用试用版进行测试)
  • 我尝试了
    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);