1

我正在使用具有动态内容的鸭嘴兽自动生成 PDF 文件。

这意味着文本内容的长度(直接位于 pdf 文件的底部)可能会发生变化。

但是,如果内容太长,可能会发生分页。这是因为我使用“静态”垫片:

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

因为我总是希望只有一页,所以我需要以某种方式动态设置 Spacer 的高度,以便 Spacer 将页面上剩余空间的“其余部分”作为其高度。

现在,我如何获得留在页面上的“剩余”高度?

4

2 回答 2

2

我在reportlab 库中嗅了一下,发现了以下内容: 基本上,我决定使用一个框架来打印flowables。f._aH 返回 Frame 的高度(我们也可以手动计算)。减去我们通过 wrap 得到的其他两个流动对象的高度,我们得到剩余的高度,即 Spacer 的高度。

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 回答