<div dir="ltr">Hello,<br><br>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.<br>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.<br><br>Notably, the repeated rows specified by `repeatRows` will then be inserted at the start of T2, before `T.split()` returns `[T1, T2]`.<br><br>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!<br><br>I've confirmed this is reproducible in version 4.4.4.<br><br>I'm attaching a minimal reproducible example. The output frames look like this on v4.4.4:<div><img src="cid:ii_midqq7mb2" alt="CleanShot 2025-11-13 at 14.24.08@2x.jpg" width="542" height="158"><br></div><div><img src="cid:ii_midqqjer3" alt="CleanShot 2025-11-13 at 14.24.21@2x.jpg" width="542" height="143"><br></div><div><br></div>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:<div><br></div><div><img src="cid:ii_midqr4ev4" alt="CleanShot 2025-11-13 at 14.29.58@2x.jpg" width="542" height="134"><br></div><div><img src="cid:ii_midqrgby5" alt="CleanShot 2025-11-13 at 14.30.11@2x.jpg" width="542" height="141"></div><div><div>If there's another approach that would make more sense, I'd be happy to put time into fixing this.</div><div><br></div><div>Thanks so much!</div><div>Yosh</div></div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><b style="color:rgb(34,34,34)">Yoshua Wakeham</b><br style="color:rgb(34,34,34)"><span style="color:rgb(34,34,34)">Senior Software Developer</span><br style="color:rgb(34,34,34)"><span style="color:rgb(34,34,34)">yosh@atticus.tech</span></div></div></div>