Doc文档save时报错

请问下这个报错可能是什么原因:

<dependency>
	<groupId>com.aspose</groupId>
	<artifactId>aspose-words</artifactId>
	<version>24.7</version>=
</dependency>
public String doc2Markdown(String taskId, InputStream inputStream, DocFilterCallerData callerData) throws Exception {
        try (inputStream; ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            Document document = new Document(inputStream);
            document.getChildNodes(NodeType.SHAPE, true).clear();
            document.getChildNodes(NodeType.GROUP_SHAPE, true).clear();

            MarkdownSaveOptions markdownSaveOptions = new MarkdownSaveOptions();
            DocFilterUtils.docFilter(document, markdownSaveOptions, callerData);
            document.save(outputStream, markdownSaveOptions);
            String contentString = outputStream.toString();
            if (Objects.nonNull(callerData) && Objects.nonNull(callerData.getRemoveTableOfContents())
                    && callerData.getRemoveTableOfContents()) {
                return DocFilterUtils.removeAnchorTags(contentString);
            }
            return contentString;
        }
    }
Caused by: java.lang.IllegalStateException: Not expected other boolex values here.

at com.aspose.words.zzZsr.toBool(Unknown Source)

at com.aspose.words.zzZ7y.zzYgZ(Unknown Source)

at com.aspose.words.zzYwH.visitParagraphStart(Unknown Source)

at com.aspose.words.Paragraph.acceptStart(Unknown Source)

at com.aspose.words.CompositeNode.acceptCore(Unknown Source)

at com.aspose.words.Paragraph.accept(Unknown Source)

at com.aspose.words.CompositeNode.acceptChildren(Unknown Source)

at com.aspose.words.CompositeNode.acceptCore(Unknown Source)

at com.aspose.words.Body.accept(Unknown Source)

at com.aspose.words.zzZo9.zz0l(Unknown Source)

at com.aspose.words.zzZo9.zzZ2u(Unknown Source)

at com.aspose.words.zzXCv.zzZ2u(Unknown Source)

at com.aspose.words.Document.zz0l(Unknown Source)

at com.aspose.words.Document.zzZ2u(Unknown Source)

at com.aspose.words.Document.zzZ2u(Unknown Source)

at com.aspose.words.Document.save(Unknown Source)

@Endergarten

可能的原因

IllegalStateException: Not expected other boolex values here.Aspose.Words for Java 在内部遍历文档节点时抛出的异常,常见的触发场景包括:

场景 说明 解决思路
文档中包含 Aspose.Words 仍未完全实现的节点(如某些 字段、宏、SmartArt、OLE 对象、复杂表格 在转换为 Markdown 时,渲染器会尝试把这些节点解析为布尔表达式(boolex),但当前实现不支持 - 先使用 DocumentVisitordocFilter 删除/替换这些节点
- 或者在保存前将文档 简化(仅保留文本、图片、基本段落)
DocFilterUtils.docFilter 对节点树做了不完整的修改 代码中先 clear()ShapeGroupShape,如果 docFilter 再对文档结构进行修改(如删除节点后未更新父子关系),会导致内部状态不一致 - 暂时移除 docFilter,确认是否仍报错
- 如果 docFilter 必须保留,检查其中是否有对 Paragraph、Run、Field 等节点的直接 remove 操作,改用 node.remove() 并在删除后 调用 node.getParentNode().removeChild(node)
使用了旧版/不匹配的 Aspose 依赖 依赖声明中出现了非法字符 =, 例如 <version>24.7</version>=,导致 Maven 拉取的实际 JAR 不是预期的 24.7 版本 - 确认 pom.xml 正确写成 <version>24.7</version>
- 清理本地仓库并重新 mvn clean install
文档中包含未受支持的 Markdown 选项 MarkdownSaveOptions 某些属性(如 setExportImages(true)setExportTrackedChanges(true))在特定文档结构下会触发内部布尔表达式解析错误 - 简化 MarkdownSaveOptions,例如只保留 setExportImages(true),其余使用默认值
- 逐项打开属性定位具体导致异常的选项

关键点:该异常通常来源于 文档结构不一致Aspose.Words 对某类节点的实现缺陷,而不是 save() 方法的使用错误。


步骤排查建议

  1. 检查 Maven 依赖

    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-words</artifactId>
        <version>24.7</version>   <!-- 必须去掉多余的 = -->
    </dependency>
    
  2. 最小化代码(排除 docFilter 的影响)

    public String doc2Markdown(InputStream inputStream) throws Exception {
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            Document doc = new Document(inputStream);
    
            // 仅保留基本节点,先不清除 Shape/GroupShape
            MarkdownSaveOptions options = new MarkdownSaveOptions();
            // 简化选项,先关闭所有可选功能
            options.setExportImages(true);
            options.setExportTrackedChanges(false);
            options.setExportComments(false);
    
            doc.save(outputStream, options);
            return outputStream.toString(StandardCharsets.UTF_8.name());
        }
    }
    
    • 如果不报错,说明问题出在 docFilterclear() 代码。
    • 如果仍报错,则是文档本身包含 Aspose.Words 暂不支持的元素。
  3. 定位有问题的文档元素

    • 使用 DocumentVisitor 遍历文档,打印节点类型。示例:

      class NodeTracer extends DocumentVisitor {
          @Override
          public int visitParagraphStart(Paragraph paragraph) {
              System.out.println("Paragraph: " + paragraph.getText().trim());
              return VisitorAction.CONTINUE;
          }
      
          @Override
          public int visitShapeStart(Shape shape) {
              System.out.println("Shape: " + shape.getShapeType());
              return VisitorAction.CONTINUE;
          }
          // 依次实现其他节点的 visit* 方法...
      }
      
      // 调用
      doc.accept(new NodeTracer());
      
    • 找到出现异常前最后一次打印的节点,它很可能是触发问题的根源。

  4. 尝试升级到最新的 Aspose.Words 版本(若有 24.8、24.9 之类的更新)
    许多内部 bug 在后续发布中已被修复。升级步骤同第 1 步,只需把 <version> 改为最新版。

  5. 如果必须删除 Shape/GroupShape,请改为:

    doc.getChildNodes(NodeType.SHAPE, true).forEach(Node::remove);
    doc.getChildNodes(NodeType.GROUP_SHAPE, true).forEach(Node::remove);
    
    • 使用 remove() 而不是 clear()(后者会直接清空集合,可能留下残余引用)。
  6. 如仍无法解决,请提供以下信息,以便我们定位:

    • 完整的异常堆栈(包括最上层的 at com.aspose.words... 行号)
    • 触发异常的 Word 文档样本(若涉及敏感信息可脱敏)
    • DocFilterUtils.docFilter 中的实现代码(尤其是对节点的增删改操作)

    带这些信息我们可以在内部复现并给出更精准的补丁或建议。


参考文档


小结

  1. 确认 Maven 依赖格式正确;
  2. 先排除 docFilterclear() 的影响;
  3. 简化 MarkdownSaveOptions,逐项打开定位问题选项;
  4. 如有必要,升级到最新的 Aspose.Words 版本;
  5. 若仍报错,请提供文档样本及 docFilter 实现,以便进一步分析。

祝您调试顺利!如果还有其他细节需要帮助,请随时回复。

@Endergarten 请您将有问题的输入文档附在这里以便我们测试。我们会检查问题并提供更多信息。