Horizontal composite — the row reserves its full height up front (ctx.ensureSpace, keep-together)
then renders every column's children into a per-column sub-context whose cursor/advanceY are
detached from the engine's real cursor: each column starts back at the row's top edge, which the
real cursor can't do (PdfCursor.syncTo never goes backwards). The real cursor advances exactly
once, by the tallest column's height.
Horizontal composite — the row reserves its full height up front (ctx.ensureSpace, keep-together) then renders every column's children into a per-column sub-context whose cursor/advanceY are detached from the engine's real cursor: each column starts back at the row's top edge, which the real cursor can't do (PdfCursor.syncTo never goes backwards). The real cursor advances exactly once, by the tallest column's height.