制作一个最上面的形状
本文关键字:一个 | 更新日期: 2023-09-27 18:09:13
在我的Word外接程序中,我有一个包含特定Section
的Word Document
对象。在这个Section
中,我添加了一个Shape
:
var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;
我的问题是,一些Word文档模板有图像或其他东西出现在我的形状的顶部。最初,我认为设置Z顺序就足以解决这个问题:
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
它没有。所以我的问题是,我怎么才能完全设置我的Shape
的Z轴顺序,或者换句话说,我还需要做些什么来设置我的Shape
,使它成为你在文档中看到的最上面的东西(意思是,它出现在所有其他东西之上)?
我终于明白为什么这些方法不起作用了:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
问题是我在HeaderFooter
部分中添加了Shape
对象,但是在Document
中定义了显示在它上面的形状。z轴顺序只相对于你的对象所在的同一节中的其他形状(无论你的对象是在实际文档中,头,脚,等等)。
不使用下面的代码来添加形状到特定的部分:
var shape = section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0, section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage].Range) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
我使用这段代码将其直接添加到我的文档中,然后对其应用z顺序,它实际上工作了。它出现在模板中所有其他对象的上方:
var shape = document.Shapes.AddTextEffect(MsoPresetTextEffect.msoTextEffect1, "Example text...", "Calibri", 72, MsoTriState.msoFalse, MsoTriState.msoFalse, 0, 0) as Shape;
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
编写Word宏,第二版非常清楚地说明了这一点:
因此,绝对z轴顺序取决于其他因素,例如在这种情况下ZOrder方法设置Shape对象相对于其他对象的z轴顺序对象。请注意,该方法不设置绝对z轴顺序。
Shape
实际驻留的位置。
在Word中手动操作,我选择"在文本前面显示"选项。你应该试试:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
如果因为有其他对象而不能单独工作,请尝试依次使用:
shape.ZOrder(MsoZOrderCmd.msoBringInFrontOfText);
shape.ZOrder(MsoZOrderCmd.msoBringToFront);
这样做的原因是MS Word似乎将文本和其他对象视为具有不同的z轴顺序。