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).