OpenXml和Word:如何计算WrapPolygon坐标?

时间:2011-08-27 07:28:11

标签: ms-word openxml openxml-sdk

我正在使用OpenXml库创建Microsoft Word文档。我需要的大部分内容已经正常工作。但是,我不能为我的生活找到以下一点信息。

我在锚点中显示图像,这会导致文本环绕图像。我使用WrapSquare但这似乎会影响上一个段落的最后一行,如下图所示。图像锚定到第二个段落,但导致第一个段落的最后一行也缩进图像周围。

Word Screenshot http://www.softcircuits.com/Client/Word.jpg

在Word中进行实验,我可以通过将包装更改为WrapTight来使文本换行。但是,这需要WrapPolygon具有多个坐标。我找不到任何方法来确定多边形坐标,以便它们匹配图像的大小,以像素为单位。

文档似乎甚至没有说明这些坐标使用了哪些单位,更不用说如何从像素计算它们。我只能假设计算会涉及DPI值,但我不知道如何确定当用户最终将文档加载到Word时将使用什么DPI。

如果有人能够解释为什么上述问题首先发生,我也会感到满意。我可以将图像向下移动,前一段不再受影响。但为什么这有必要呢? (Left和Top的文本设置距离为0“。)

2 个答案:

答案 0 :(得分:2)

WrapPolygon元素有两个可能的LineToStartPoint子元素,每个元素都采用x和y坐标。根据 2.1.1331第1部分第20.4.2.9节,lineTo(包装多边形线端位置) 2.1.1334第1部分第20.4.2.14节,启动(包装多边形开始)在[MS-OI29500: Microsoft Office Implementation Information for ISO/IEC-29500 Standard Compliance]中找到:

  

标准规定x和y属性用。表示   动车组。 Office会在固定坐标中解释x和y属性   空间为21600x21600。

至于将像素转换为EMU(英制公制单位),请查看此blog帖子以获取示例。

答案 1 :(得分:2)

我终于解决了这个问题。尽管标准说的是,WrapPolygon坐标是不是 EMU(英制公制单位)。坐标相对于固定坐标空间(21600 x 21600,如amurra提供的报价中所述)。

更具体地说,这意味着0,0位于图像的左上角,21600,21600位于图像的右下角。无论图像的大小如何,都是这种情况。大于21600的坐标延伸到图像外部。

根据this article,“21600值是早期版本的Microsoft Office绘图层中的遗留工件。”