gpt4 book ai didi

java - 从 Docx 中删除内容控件

转载 作者:行者123 更新时间:2023-12-02 01:26:30 25 4
gpt4 key购买 nike

我想用实际文本替换 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();

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

  • 我现在暂时不尝试 JODConverter,因为它依赖于 LibreOfficeOpenOffice - 我们的服务器上没有它,也没有它无权安装新软件。
  • 我研究了 Docx4J,但在检查其 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);

关于java - 从 Docx 中删除内容控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com