2

アイテムのリストの PDF レポートを準備しています。これは本質的に長いテーブルであり、一部のセルにはデータが入力され、一部のセルには空のセルがあります。このレポートは印刷され、ユーザーは紙の空のセルに記入します。また、新しい行を追加し、新しいデータを入力します。

そのため、データを入力するためのグリッドとしていくつか (たとえば 3 つ) の空の行を提供します。しかし、ページにまだ余裕がある場合は、空の行で埋めたいと思います。

最後のページに収まる数の行を追加するにはどうすればよいですか?

別のアプローチ:
おそらく、この動作は、各行に 1 行のテーブルを持つ Paragraph を使用すると簡単に実現できます。しかし、すべてのページで最初の行を繰り返す必要があります (これは を使用したテーブルでは簡単ですrepeatRows=1)。

何か案は?

4

2 に答える 2

1

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

于 2011-06-09T20:12:35.817 に答える
1

この表がドキュメントのどこで終わるかによっては、手っ取り早くハックな解決策として、表に十分な数の行を貼り付けて、ページを埋めて次のページにスピルオーバーすることを確認することができます。次に、ドキュメントを作成した後、最後のページを切り取って、そのページを除いた新しい PDF を作成します。

もちろん、これはテーブルがドキュメントの最後にある場合にのみ機能します (または、ReportLab の商用バージョンを使用している場合は、PDF をつなぎ合わせることができますが、その場合は問題になりません)。私が言ったように醜いですが、それは仕事を成し遂げます..

于 2011-06-10T12:28:32.333 に答える