【问题标题】:OpenXml and Word: How to Calculate WrapPolygon Coordinates?OpenXml 和 Word:如何计算 WrapPolygon 坐标?
【发布时间】:2015-02-26 06:47:25
【问题描述】:

我正在使用 OpenXml 库创建 Microsoft Word 文档。我需要的大部分东西已经正常工作了。但是,我终生无法找到以下信息。

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

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

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

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

如果有人能首先解释为什么会出现上述问题,我也会很满意。我可以将图像向下移动,并且上一段不再受到影响。但为什么这是必要的? (Left 和 Top 的距离文本设置均为 0"。)

【问题讨论】:

    标签: ms-word openxml openxml-sdk


    【解决方案1】:

    WrapPolygon 元素有两个可能的子元素 LineToStartPoint,每个子元素都有一个 x 和 y 坐标。根据 2.1.1331 Part 1 Section 20.4.2.9, lineTo (Wrapping Polygon Line End Position)2.1.1334 Part 1 Section 20.4.2.14, start (Wrapping Polygon Start) 在 [MS-OI29500: Microsoft Office Implementation Information for ISO/IEC-29500 Standard Compliance] 中找到:

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

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

    【讨论】:

    • 感谢参考说明这些坐标以 EMU 表示。我一直使用 ECMA-376 作为参考,但它似乎没有提供此信息。关于博客文章,我对这篇文章很熟悉。它确实展示了如何将像素转换为基于英寸的值(就像 EMU 一样);但是,它假定 DPI 为 72。据我了解,DPI 可以是 72、96、300 甚至 1200 之类的值。
    • 顺便说一句,微软文档中的最后一句话对我来说没有任何意义。 21600x21600 EMU 的坐标空间不到一英寸。我错过了其中的一部分。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      相关资源
      最近更新 更多