【问题标题】:In PowerPoint 2007, how can I position a Callout's Tail programatically?在 PowerPoint 2007 中,如何以编程方式定位标注尾部?
【发布时间】:2009-12-01 21:21:04
【问题描述】:

我正在查看 PowerPoint 2007 文件的 DrawingML,这就是标注对象的坐标和几何图形:

<p:spPr>
    <a:xfrm>
        <a:off x="2819400" y="5181600"/> // X,Y Position of Callout Box
        <a:ext cx="609600" cy="457200"/> // Width,Height of Callout Box
    </a:xfrm>
    <a:prstGeom prst="wedgeRectCallout">
        <a:avLst>
            <a:gd name="adj1" fmla="val 257853"/> // X Position Of Tail
            <a:gd name="adj2" fmla="val -532360"/> // Y Position of Tail
        </a:avLst>
    </a:prstGeom>
    <a:solidFill>
        <a:schemeClr val="accent1">
            <a:alpha val="50000"/>
        </a:schemeClr>
    </a:solidFill>
</p:spPr>

我遇到的问题是告诉它把尾巴放在幻灯片上特定坐标的公式。我试过这个来计算它,但它不能正常工作。

//This gives me the distance between the Coordinate and the Center of the Callout.
DistanceX = Coordinate.X - (Callout.X + Callout.X_Ext)/2
DistanceY = Coordinate.Y - (Callout.Y + Callout.Y_Ext)/2

但是,几何值并不是两点之间的距离。

有人知道计算公式是什么吗?

【问题讨论】:

    标签: powerpoint openxml drawingml presentationml


    【解决方案1】:

    我想我已经找到了公式:

    DistanceX = Coordinate.X - (Callout.X + (Callout.X_Ext/2))
    DistanceY = Coordinate.Y - (Callout.Y + (Callout.Y_Ext/2))
    
    TailX = (DistanceX/Callout.X_Ext) * 100000
    TailY = (DistanceY/Callout.Y_Ext) * 100000
    

    【讨论】:

      【解决方案2】:

      如果可以进行调整,这可能是一个很好的快速方法 - 我还没有测试过。但是,如果我理解您的要求,那就是如何在屏幕上的特定位置获取wedgeRectCallout 尾部点的 x/y,包括调整尾部大小/位置的情况。我假设你有一个预先定义好的楔形矩形标注尺寸。

      您想要的值需要从 presetShapeDefinitions.xml 中计算出来(在 Ecma 下载中找到)。你想要的值在wedgeRectCallout 元素中:

      <lnTo>
      <pt x="xb" y="yb" />
      </lnTo>
      

      那么你如何计算x=xby=yb?转到 Ecma 文档并查看如何阅读公式 DrawingML - Framework Reference Material -> Drawing ML - Main -> Shape Definitions and Attributes -> gd (Shape Guide) 并计算gdLst 中的形状指南(取默认值或修改后的调整值) )。在这种情况下,您需要计算所有/大多数指南以确保获得 xb 和 yb 的值。

      如果您遇到任何问题或对此有更多疑问,请告诉我。

      【讨论】:

        【解决方案3】:

        在 presetShapeDefinitions.xml 文件中,它定义了绘制形状所需的参数和公式,如果您查看形状“wedgeRectCallout”,您将看到许多标签,例如:&lt;avLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main"&gt;&lt;gdLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main"&gt;&lt;ahLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main"&gt;&lt;cxnLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main"&gt;&lt;rect l="l" t="t" r="r" b="b" xmlns="http://schemas.openxmlformats.org/drawingml/2006/main" /&gt;&lt;pathLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main"&gt;
        了解如何绘制形状所需的重要标签是:&lt;gdLst&gt;&lt;pathLst&gt;.&lt;gdLst&gt; 包含形状的公式,&lt;pathLst&gt; 说明如何绘制形状。
        我写了一个小程序,将文件 presetShapeDefinitions.xml 中的所有公式转换为 javascript。
        到程序的网站页面点击here
        这个程序帮助我构建了PPTXjs 插件,可以将 PPTX 文件转换为 HTML。
        希望这会有所帮助。

        【讨论】:

        • 这里没有答案,只是链接到其他地方的答案以及一些周围的文字。这不是 Stack Overflow 上的答案。如果您在其他地方发布答案链接,则应复制相关部分或在答案中总结这些链接的内容。
        猜你喜欢
        • 2011-04-07
        • 2011-05-06
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        相关资源
        最近更新 更多