Мне придется найти часть моего кода, но я, кажется, припоминаю, что мне приходилось делать что-то, измеряя текущую позицию 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 (количество строк на странице), которые могли быть установлены, поэтому я сначала проверил, существует ли это значение, и если да, то был ли я на подсчете строк для текущей страницы. Если бы не было ограничений на общее количество строк на странице, я проверил бы, какой будет моя позиция 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
мой холст. Я слежу за тем, сколько строк я разместил на странице, потому что бывают случаи, когда мы перепаковываем документ, который может содержать разрывы страниц, и все это в нашей пользовательской разметке.
person
g.d.d.c
schedule
09.06.2011