コードの一部を取得する必要がありますが、現在の 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
のキャンバスです。改ページを含む可能性のあるドキュメントをすべてカスタム マークアップで再ラップする場合があるため、ページに配置した行数を追跡しています。