Units & origin
IDML geometry is measured in points (1/72 inch) from an origin at the page's top-left, with Y growing downward instead of upward.
Every IDML coordinate is a point, measured from the page's top-left, with Y growing downward.
In short: Every coordinate in an IDML page item — its bounds, its transform,
the anchor points of its outline — is a plain number with two implicit
conventions behind it: a unit and an origin. The unit is always the point
(1/72 of an inch), so a value like 595.276 is simply 210 mm expressed in
points. The origin is the page's top-left corner, and unlike the math-class
plane, Y grows downward — moving down the page gives a larger Y. Get those
two conventions right and the numbers stop being mysterious.
The unit is the point
There is one measurement unit in IDML geometry: the point, defined as 1/72
of an inch. The parser never asks what unit a coordinate is in; it parses every
geometry attribute as a plain number and treats it as points throughout. When
you see a page bound like 841.89, that is points — an A4 page is 841.89 pt
tall (297 mm × 72 / 25.4).
This is why a value such as 595.276 shows up so often: it is 210 mm, the A4
width, expressed in points. Nothing in the file says "points"; it is simply the
unit the whole format is built on.
The origin is the top-left, and Y grows downward
The point (0, 0) of a page is its top-left corner. From there:
- X grows to the right — the familiar direction.
- Y grows downward — the unfamiliar one. Moving down the page means a larger Y, the opposite of the math-class plane where up is positive.
This downward-Y convention is the single most common source of confusion when
reading IDML by hand. A frame whose top edge is at Y = 100 and whose bottom
edge is at Y = 300 is 200 pt tall, with the bottom edge below the top — even
though 300 is the bigger number. Everything else in the format follows from
holding that picture steady.
How the parser reads it
The parser confirms this directly in how it derives a frame's size. A
Bounds record stores top,
left, bottom, and right, and computes:
- width as
right − left - height as
bottom − top
For those subtractions to give positive sizes, bottom must be the larger Y and
right the larger X — exactly the top-left-origin, Y-downward space. The same
holds for the path anchors: when a shape has no explicit bounds, the parser scans
its anchor points and takes the smallest Y as the top and the largest Y as the
bottom. Up is the small number; down is the big one.
Inner space vs. page space
One more subtlety, picked up in detail on the next pages: each page item is
authored in its own coordinate space, usually starting at its own (0, 0),
and then an ItemTransform places
that whole little space onto the page. So a shape's anchor points are not page
coordinates — they are the shape's inner coordinates, waiting to be moved into
place. The unit (points) and the orientation (Y down) are the same in both
spaces; only the origin shifts.
Frequently asked questions
What unit does IDML use for coordinates? IDML geometry uses the point, defined as 1/72 of an inch, as its only unit. Nothing in the file labels a value as points — the parser reads every geometry attribute as a plain number and treats it as points throughout.
Where is the origin in an IDML page?
The origin (0, 0) is the page's top-left corner. X grows to the right as
usual, but Y grows downward, so a point further down the page has a larger Y
value — the opposite of the math-class convention where up is positive.
Why is a value like 595.276 so common in IDML files?
595.276 is 210 mm — the width of A4 — expressed in points (210 × 72 / 25.4).
Likewise 841.89 is the A4 height of 297 mm in points. Metric page sizes show up
as these non-round numbers because the format's underlying unit is the point.
Geometry & coordinates
The coordinate space every IDML page item lives in — points as the unit, a top-left origin with Y growing downward, affine transforms, and anchor-point path anatomy.
ItemTransform
ItemTransform is the six-number affine matrix (a b c d tx ty) that maps a page item's inner coordinate space onto the page, encoding translation, scale, rotation, and shear.