1

Platypus を使用して、動的コンテンツを含む PDF ファイルを自動的に生成しています。

これは、テキスト コンテンツ (pdf ファイルのすぐ下にある) の長さが異なる場合があることを意味します。

ただし、コンテンツが長すぎる場合、改ページが行われることがあります。これは、「静的」スペーサーを使用しているためです。

s = Spacer(width=0, height=23.5*cm) 

私は常に1ページだけにしたいので、ページに残っているスペースの「残り」がスペーサーによってその高さとして取得されるように、スペーサーの高さを動的に設定する必要があります。

では、ページに残っている高さの「残り」を取得するにはどうすればよいですか?

4

2 に答える 2

2

reportlab ライブラリを少し調べてみたところ、次のようなことがわかりました。f._aH は Frame の高さを返します (これは手で計算することもできます)。ラップによって取得した他の 2 つのフロー可能オブジェクトの高さを差し引くと、スペーサーの高さである残りの高さが得られます。

elements.append(Flowable1)
elements.append(Flowable2)

c = Canvas(path)
f = Frame(fx, fy,fw,fh,showBoundary=0)

# compute the available height for the spacer
sheight = f._aH - (Flowable1.wrap(f._aW,f._aH)[1] + Flowable2.wrap(f._aW,f._aH)[1])

# create spacer
s = Spacer(width=0, height=sheight)

# insert the spacer between the two flowables
elements.insert(1,s)

# create a frame from the list of elements
f.addFromList(elements,c)

c.save()

テスト済みで正常に動作します。

于 2010-04-30T12:14:49.157 に答える
0

私が見る限り、あなたはフッターが欲しいですよね?

次に、次のようにする必要があります。

def _laterPages(canvas, doc):
    canvas.drawImage(os.path.join(settings.PROJECT_ROOT, 'templates/documents/pics/footer.png'), left_margin, bottom_margin - 0.5*cm, frame_width,  0.5*cm)

doc = BaseDocTemplate(filename,showBoundary=False)
doc.multiBuild(flowble elements, _firstPage, _laterPages)
于 2010-04-28T12:12:41.860 に答える