关于groupshape 的markup language问题。

我读取一份文档word文档,想把一些shape组合成一个groupshape,但是报错,【Cannot insert a Shape into a GroupShape with a different markup language】。我读取的word中的shape markup language是dml,但是自己创建的GroupShape group = new GroupShape(mDocument);却是vml,导致无法组合shape。这样如何解决?

@Calvin95

要解决您遇到的“无法将形状插入到具有不同标记语言的GroupShape中”的问题,您需要确保所有形状的标记语言一致。您提到读取的Word文档中的形状使用的是DML,而您创建的GroupShape是VML,这导致了不兼容。

解决方案

  1. 确保使用相同的标记语言:在创建GroupShape时,确保它与您要组合的形状使用相同的标记语言(DML)。您可以通过设置文档的保存格式来确保这一点。

  2. 创建GroupShape:使用DocumentBuilder的InsertGroupShape方法来创建GroupShape,并确保传入的形状都是DML类型。

以下是一个示例代码,展示如何创建一个DML类型的GroupShape并将形状组合在一起:

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// 插入DML形状
Shape shape1 = builder.InsertShape(ShapeType.Rectangle, 200, 250);
shape1.Left = 20;
shape1.Top = 20;

Shape shape2 = builder.InsertShape(ShapeType.Ellipse, 150, 200);
shape2.Left = 40;
shape2.Top = 50;

// 创建GroupShape并插入形状
GroupShape groupShape = builder.InsertGroupShape(shape1, shape2);

// 保存文档
doc.Save("output.docx");

确保在插入形状时,文档的保存格式支持DML,这样就可以避免标记语言不匹配的问题。

后续步骤:请按照上述步骤操作,并确保所有形状的标记语言一致。如果您还有其他问题或需要进一步的帮助,请随时告诉我!我将很高兴为您提供支持。

我这里没有GroupShape groupShape = builder.InsertGroupShape(shape1, shape2);这个方法。

@Calvin95 遗憾的是,Aspose.Words 和 MS Word 不允许结合 VML 和 DML 形状。我们已经为此创建了功能请求 WORDSNET-18944,但现在被推迟了。

当您处理文档时,请使用相同的标记语言。要创建 DML 形状,您需要使用 builder.InsertShape(...)。如果您的文档中包含已创建的形状,您可以尝试使用以下代码将这些形状转换为 DML,然后尝试将这些形状添加到组形状中:

OoxmlSaveOptions saveOptions = new OoxmlSaveOptions
{
    Compliance = OoxmlCompliance.Iso29500_2008_Strict,
    SaveFormat = SaveFormat.Docx
};

我现在的问题是,我读取的word中的shape是dml的,但是自己新建的GroupShape group = new GroupShape(mDocument);却是vml。导致无法加入到我的groupshape中。我的诉求是,想要把文档中的一部分shape组合成一个group,然后导出为图片。

@Calvin95 如果要使用 DML,请使用 builder.InsertGroupShape() 方法。

非常感谢你的回复,我在使用 如下代码组合多个shape后,保存为图片。出现拉伸和位置错乱的情况。

var shapesToProcess = new List<Shape>();
shapesToProcess.Add((Shape)shape.Clone(true));
GroupShape groupShape2 = builder.InsertGroupShape(shapesToProcess.ToArray());
groupShape2.GetShapeRenderer().Save(Path.Combine(Application.StartupPath, "sample", imageName), imageOptio);

正常的图片应该是这样的


而组合出来后变成了这样。

框中的字也出现了丢失情况。

@Calvin95 你能提供带有形状的输入文件吗?另外,请提及您正在使用的“Aspose.Words”版本?

我使用的版本是25.1.0.
请帮忙试下能否拼接组合?
test.docx (38.9 KB)

@Calvin95 感谢您报告此问题。 我们已经在我们的内部问题跟踪系统中打开了以下新工单,并将根据 免费支持政策 中提到的条款提供它们的修复:

Issue ID(s): WORDSNET-28550

如果您需要优先支持以及直接联系我们的付费支持管理团队,您可以获得 付费支持服务