Thought I would share a few things I recently learned about coordinates when using Zend Framework‘s Zend Pdf library.

- The typographical point is the
**unit of measurement**used for all coordinates. 72 points equals 1 inch. An 8.5″ * 11″ page is 612 * 792 points. - The x/y coordinate
**origin**is the*bottom left*corner of the page. If you are laying out a page from top to bottom, the y-coordinate will get*smaller*as you work your way down the page. **Lines are centered**on their coordinates. A 1-unit thick vertical line drawn at x-coordinate 50—$page->drawLine(50, $startY, 50, $endY);

—will visually appear to start at x-coordinate 49.5 and end at x-coordinate 50.5. You can compute these values by taking the x-coordinate and subtracting (for the starting x) or adding (for the ending x) one half of the line thickness:

starting x = x – thickness/2

ending x = x + thickness/2The same rule applies to y-coordinates and horizontal lines.

- When drawing
**rectangles**, lines are also centered on x- and y-coordinates (see previous point). If you want a rectangle with a 2-unit thick border drawn so that its outside edges appear between 100, 50 and 200, 100, you’ll need to call draw rectangle with the following arguments:$page->drawRectangle(101, 51, 199, 99);

Here’s the formula to compute these values:

starting x = desired starting x + 1/2 line thickness

starting y = desired starting y + 1/2 line thickness

ending x = desired ending x – 1/2 line thickness

ending y = desired ending y – 1/2 line thickness - The
**y-coordinate for text**specifies the text’s baseline. If you know the y-coordinate you’d like to use for the very top of the line of text, you can calculate the baseline y-coordinate as follows:$yCoordinateBaseline = $desiredYCoordinate - ($font->getAscent() / $font->getUnitsPerEm() * $fontSize);

(where $font is the appropriate Zend_Pdf font instance and $fontSize is the font’s size).