关于Aspose.Words获取一个图片所在位置的疑问

我有一份WORD文档,里面有三张DM码图片,分别在右上角、左下角、右下角,因为WORD里面插入图片默认都是图片的垂直位置是相对于段落而言的,我想用aspose.words将图片都更改为垂直位置相对于页面位置的操作,但是我发现每次更改完毕以后,它的值并不是我在word里面切换为相对于页面设置的距离,而是跟随之前的段落距离来设置的,比方说我的某一张图片,在word中插入后,默认的垂直距离是相对于段落1.6cm,之后我在word中右键-设置图片大小和位置,切换到位置选项后,取消勾选对象随文字移动选项后,垂直距离会变为24cm左右;我使用aspose.words将图片的垂直相对位置切换为页面后,打开新生成的文档,发现图片的垂直位置更改为了页面,但是距离值还是之前相对于段落的1.6cm,请问是哪里代码写错了吗?还是我获取的方式不对?我编写的代码已经删除了

我使用 ShapeBase.Bounds属性获取X和Y的值,使用 ShapeBase.RelativeVerticalPosition修改图片的位置参考。

1、政治素质测评(单人单表).docx (19.1 KB)

抱歉,附件是这个,我忘记上传了。

@jidesheng, 如果我理解正确的话,使用 Aspose.Words 您想要将附加文档中图片的垂直位置从相对于段落更改为相对于页面。下面的代码使图像相对于页面的垂直位置:

Document doc = new Document("1、政治素质测评(单人单表.docx");

LayoutCollector collector = new LayoutCollector(doc);
LayoutEnumerator enumerator = new LayoutEnumerator(doc);

foreach (Shape shape in doc.GetChildNodes(NodeType.Shape, true))
{
    enumerator.Current = collector.GetEntity(shape);

    shape.RelativeVerticalPosition = RelativeVerticalPosition.Page;
    shape.Top = enumerator.Rectangle.Top;
}

doc.Save("out.docx");

谢谢,确实是这个效果,这段代码是先获取了文档的原布局全部信息,然后再将信息进行填充吗?

@jidesheng, 是的,借助 LayoutCollector 和 LayoutEnumerator,您可以访问在文档渲染过程中计算的布局对象。

有关更多详细信息,请参阅我们的文档:

我想再请问一下,我提供的文档中有三个二维码,其中有个二维码是在文档右下角的,目前我只能通过图像的宽度和高度来确定这个二维码是不是我要获取X和Y值的图片,Aspose.Words可以实现判断图片是在左上角还是右下角这个操作吗?还是说要通过页面的宽度和高度与图片所在位置与页面直接距离得出一个大约的范围来判断?

@jidesheng, 是的,您可以使用页面的宽度和高度来决定图像在页面上的位置。 如果所有文档部分都相同,则可以使用该部分的以下属性找到页面宽度和高度:

doc.FirstSection.PageSetup.PageWidth;
doc.FirstSection.PageSetup.PageHeight;