我正在使用OpenXml库创建Microsoft Word文档。我需要的大部分内容已经正常工作。但是,我不能为我的生活找到以下一点信息。
我在锚点中显示图像,这会导致文本环绕图像。我使用WrapSquare
但这似乎会影响上一个段落的最后一行,如下图所示。图像锚定到第二个段落,但导致第一个段落的最后一行也缩进图像周围。
Word Screenshot http://www.softcircuits.com/Client/Word.jpg
在Word中进行实验,我可以通过将包装更改为WrapTight
来使文本换行。但是,这需要WrapPolygon
具有多个坐标。我找不到任何方法来确定多边形坐标,以便它们匹配图像的大小,以像素为单位。
文档似乎甚至没有说明这些坐标使用了哪些单位,更不用说如何从像素计算它们。我只能假设计算会涉及DPI值,但我不知道如何确定当用户最终将文档加载到Word时将使用什么DPI。
如果有人能够解释为什么上述问题首先发生,我也会感到满意。我可以将图像向下移动,前一段不再受影响。但为什么这有必要呢? (Left和Top的文本设置距离为0“。)
答案 0 :(得分:2)
WrapPolygon
元素有两个可能的LineTo
和StartPoint
子元素,每个元素都采用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绘图层中的遗留工件。”