[reportlab-users] Header appears mid-page due to splitByRow/splitInRow interaction

Robin Becker robin at reportlab.com
Tue Nov 25 07:50:52 EST 2025


Hi Yoshua,

you really like splitting rows. It's something of a problem for reportlab
as it's just grafted on to the old table code and much harder than the non
row splitting case.

Clearly finding a suitable split point across multiple columns is harrer
than splitting by rows.

Assuming that the problem is that a row split may leave space behind I
guess that the problem is that we should just fill that space and leave the
layout to the higher levels.

Certainly just using a PageBreak is not right as it will cause problems for
the higher level eg we might want a frame break or be inside one of the
other container layouts.

I'll take a look at the example and see if the fix can just use up the
space.

Thanks for the contribution . If only we had infinitely  long pages :(



On Mon, 24 Nov 2025 at 22:53, Yoshua Wakeham via reportlab-users <
reportlab-users at lists2.reportlab.com> wrote:

> Hello,
>
> I've found a bug in table-splitting code that can occur when all of
> `splitByRow`, `splitInRow`, and `repeatRows` are non-zero. Namely, a
> between-row split immediately followed by a within-row split can cause
> header/repeated rows to be drawn in the middle of a page/frame.
> Suppose a table T is too tall to fit in a frame, so `T.split()` is called.
> When `splitByRow=1` and `splitInRow>1`, we attempt a between-row split
> before checking whether a within-row split would have succeeded. Suppose
> the between-row split succeeds, splitting the table into T1 and T2.
>
> Notably, the repeated rows specified by `repeatRows` will then be inserted
> at the start of T2, before `T.split()` returns `[T1, T2]`.
>
> It seems that reportlab then tries to fit T2 into the space that remains
> in the frame after T1 is accounted for. Since we know the first row of T2
> is too big to fit in that space, the between-row split fails, and instead
> we try a within-row split. If that succeeds, it exposes the bug – because
> the repeated header rows will be drawn in the middle of the frame, along
> with the top half of the newly-split row!
>
> I've confirmed this is reproducible in version 4.4.4.
>
> I'm attaching a minimal reproducible example. The output frames look like
> this on v4.4.4:
> [image: CleanShot 2025-11-13 at 14.24.08 at 2x.jpg]
> [image: CleanShot 2025-11-13 at 14.24.21 at 2x.jpg]
>
> I'm not sure how best to fix this, but for the sake of argument, I've
> attached a patch that simply inserts a `PageBreak()` between the two
> returned tables (as long as the successful split was between rows). That
> ensures that the between-row split has the intended effect, and no content
> can "sneak" back onto the page. With my patch applied, the output looks
> like what we would expect:
>
> [image: CleanShot 2025-11-13 at 14.29.58 at 2x.jpg]
> [image: CleanShot 2025-11-13 at 14.30.11 at 2x.jpg]
> If there's another approach that would make more sense, I'd be happy to
> put time into fixing this.
>
> Thanks so much!
> Yosh
>
> --
> *Yoshua Wakeham*
> Senior Software Developer
> yosh at atticus.tech
> _______________________________________________
> reportlab-users mailing list
> reportlab-users at lists2.reportlab.com
> https://pairlist2.pair.net/mailman/listinfo/reportlab-users
>


-- 
Robin Becker
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist2.pair.net/pipermail/reportlab-users/attachments/20251125/b26436dd/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CleanShot 2025-11-13 at 14.24.08 at 2x.jpg
Type: image/jpeg
Size: 19443 bytes
Desc: not available
URL: <https://pairlist2.pair.net/pipermail/reportlab-users/attachments/20251125/b26436dd/attachment-0004.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CleanShot 2025-11-13 at 14.24.21 at 2x.jpg
Type: image/jpeg
Size: 16124 bytes
Desc: not available
URL: <https://pairlist2.pair.net/pipermail/reportlab-users/attachments/20251125/b26436dd/attachment-0005.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CleanShot 2025-11-13 at 14.29.58 at 2x.jpg
Type: image/jpeg
Size: 16179 bytes
Desc: not available
URL: <https://pairlist2.pair.net/pipermail/reportlab-users/attachments/20251125/b26436dd/attachment-0006.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CleanShot 2025-11-13 at 14.30.11 at 2x.jpg
Type: image/jpeg
Size: 16560 bytes
Desc: not available
URL: <https://pairlist2.pair.net/pipermail/reportlab-users/attachments/20251125/b26436dd/attachment-0007.jpg>


More information about the reportlab-users mailing list