我读取一份文档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。这样如何解决?
要解决您遇到的“无法将形状插入到具有不同标记语言的GroupShape中”的问题,您需要确保所有形状的标记语言一致。您提到读取的Word文档中的形状使用的是DML,而您创建的GroupShape是VML,这导致了不兼容。
解决方案:
-
确保使用相同的标记语言:在创建GroupShape时,确保它与您要组合的形状使用相同的标记语言(DML)。您可以通过设置文档的保存格式来确保这一点。
-
创建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,然后导出为图片。
非常感谢你的回复,我在使用 如下代码组合多个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);
正常的图片应该是这样的
而组合出来后变成了这样。
框中的字也出现了丢失情况。