Мне нужно пойти, чтобы получить часть своего кода, но я, кажется, вспоминаю, что нужно было что-то делать, измеряя текущую X / Y-позицию, вычисляя это с учетом того запаса, который я использовал, и затем определяя, есть ли больше информацииможет подойти или если мне нужна новая страница.Мой проект заключался в переносе длинных блоков текста, что похоже, но не совсем аналогично.Я обновлю здесь немного кода в ближайшее время.
def newline(self, options, text = ''):
if getattr(self, 'lpp', None) == self.lines[self.pages]:
self.newpage()
if getattr(self, 'y', None) > self.h - self.bm * inch:
self.newpage()
В этом случае у меня были атрибуты для lpp (Lines Per Page), которые могли быть установлены, поэтому я сначала проверил, существует ли это значение, иесли так, если бы я был на счетчике строк для текущей страницы.Если не было ограничений на общее количество строк на странице, я проверял, какой будет моя позиция Y и каков будет нижний край.При необходимости патч на странице.Здесь кое-что осталось, но это общая идея.
def newline(self, options, text = ''):
if getattr(self, 'lpp', None) == self.lines[self.pages]:
self.newpage()
if getattr(self, 'y', None) > self.h - self.bm * inch:
self.newpage()
self.addLine()
self.putText(self.x, self.h - self.y, text)
def putText(self, x, y, text):
# If we actually place some text then we want to record that.
if len(text.strip()) > 0 and not self.hasText[self.pages]:
self.hasText[self.pages] = True
# Something here to handle word wrap.
if self.wrap:
lines = self._breakScan(text)
if len(lines) > 1:
self.c.drawString(x, y, lines[0])
self.newline('', ' '.join(lines[1:]))
elif lines:
self.c.drawString(x, y, lines[0])
else:
self.c.drawString(x, y, text)
Здесь, self.c
- это мое полотно.Я отслеживаю, сколько строк я разместил на странице, потому что бывают случаи, когда мы перезаписываем документ, который может содержать разрывы страниц, все в нашей пользовательской разметке.