- // New page starting at this line
- int newY = rect.y;
-
- // We increase the offset by the difference between new and old positions
-
- int increaseOffsetBy = lineY - newY;
- yOffset += increaseOffsetBy;
-
- if (!lastLine)
- lastLine = line;
-
- m_pageBreaksStart.Add(lastStartPos);
- m_pageBreaksEnd.Add(lastLine->GetAbsoluteRange().GetEnd());
- m_pageYOffsets.Add(yOffset);
+ // Only if we're not at the start of the document, and
+ // even then, only if either it's a hard break or if the object
+ // can fit in a whole page (otherwise there's no point in making
+ // the rest of this page blank).
+ if (lastLine && (hasHardPageBreak || (line->GetSize().y <= rect.GetHeight())))
+ {
+ // New page starting at this line
+ int newY = rect.y;
+
+ // We increase the offset by the difference between new and old positions
+
+ int increaseOffsetBy = lineY - newY;
+ yOffset += increaseOffsetBy;
+
+ m_pageBreaksStart.Add(lastStartPos);
+ m_pageBreaksEnd.Add(lastLine->GetAbsoluteRange().GetEnd());
+ m_pageYOffsets.Add(yOffset);
+
+ lastStartPos = line->GetAbsoluteRange().GetStart();
+ m_numPages ++;
+ }