识别坐标为IDML可视元素(Identify coordinates for a visual el

2019-09-22 14:25发布

我需要处理排版IDML文件,生成图像,并叠加了在HTML中某些元素的其他元素。

给定一个排版IDML文件(该文件是压缩的XML的包),并给定在该文件中的可视元素(通过在XML标签)。 有没有办法找到那个视觉元素落在图像上的坐标是什么?

Answer 1:

容器的一个IDML文档中的图像的层次结构如下:

文献[含有]>传播> PageItem> PlacedImage。 网页不被用作容器,并PageItems存储在传播坐标,所以我们可以对文档和页面元素忘记。 如果你能找到在传播坐标放置的图像,以及重订那些COORDS所以0,0是在屏幕的左上角,您可以定位的图像,因为它是在InDesign文件内。

一个页面项目(其中包含的图像)不具有几何边界在IDML。 其边界被存储为PathPointType的阵列的PathGeometry标签内的对象,这样的:

<Properties>
            <PathGeometry>
                <GeometryPathType PathOpen="false">
                    <PathPointArray>
                        <PathPointType Anchor="-32.04 -35.04" LeftDirection="-32.04 -35.04" RightDirection="-32.04 -35.04" />
                        <PathPointType Anchor="-32.04 35.04" LeftDirection="-32.04 35.04" RightDirection="-32.04 35.04" />
                        <PathPointType Anchor="32.04 35.04" LeftDirection="32.04 35.04" RightDirection="32.04 35.04" />
                        <PathPointType Anchor="32.04 -35.04" LeftDirection="32.04 -35.04" RightDirection="32.04 -35.04" />
                    </PathPointArray>
                </GeometryPathType>
            </PathGeometry>
        </Properties>

你可以计算的界限自己只需获得最低/最大点值,假设在你的页面项目边界不够是一个矩形。 然后,你需要的项目改造,

ItemTransform="1 0 0 1 509.27559055100005 -123.76377952749999"

......你需要允许地方IDML认为0,0(这是变换的由来)。

在X轴,0将是结合位置(其是可变的 - 在一个单页文档它通常是传播的左手边缘,但在两页的文件可能是传播的中心)。 在这里,您将需要的页面。 BindingLocation被表示为一个整数(0之前的第一页,1为第一和第二等之间)。 您可以通过添加了前面几页的ItemTransforms找到这个COORDS。

在Y轴的闻名到Adobe的原因,0是传播的垂直中心(也不顶部或底部,正如你所期望的那样)。

所述IDML文档具有坐标的例子: http://www.photoshopelementsmac.com/devnet/indesign/documentation.html包括来自一个坐标空间转换到另一个。

此外,页面项(其给出了几何边界)内,一个放置图像具有其自己的一套图形边界内,从而可以进一步抵消它,以及它自己的ItemTransform

因此,要回答你的问题,你需要解压IDML zip文件,发现在XML图像,然后做一个总和是这样的:

// Pseudo-code:
// Calculate PageItem GeometricBounds First as noted above
X: (Spread.BindingLocation) + Spread.ItemTransform.tx + PageItem.itemTransform.tx + PageItem.GeometricBounds.Left + PlacedImage.ItemTransform.tx + PlacedImage.GraphicBounds.Left

Y: (Half Spread Height) + Spread.ItemTransform.ty + PageItem.itemTransform.ty + PageItem.GeometricBounds.Top+ PlacedImage.ItemTransform.ty + PlacedImage.GraphicBounds.Top

哦,还有一两件事:所有IDML COORDS是点。 您需要在72屏幕的PPI分来划分所有的值,如果你想以像素为单位的结果。



Answer 2:

每个<PageItem>在页面上使用ItemTransform属性来缩放,旋转,剪切,和相对变换本身包含的元素(技术上的PageItem XML元素不存在,但可以是矩形,椭圆形等元素)。

内的<PageItem>其形状是由所确定的<PathGeometry>元素及其含要素( IDML参考描述了这种与实施例详细),也指JcFx的回答。

重修正答案基于IDML规格:感谢JcFx



文章来源: Identify coordinates for a visual element in idml