Динамическая прокладка в ReportLab - PullRequest
1 голос
/ 27 апреля 2010

Я автоматически создаю PDF-файл с Platypus, который имеет динамическое содержимое.

Это означает, что может случиться так, что длина текстового содержимого (которое находится непосредственно внизу pdf-файла) может варьироваться.

Однако может случиться, что разрыв страницы выполняется в тех случаях, когда содержание слишком длинное. Это потому, что я использую «статическую» прокладку:

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

так как я всегда хочу иметь только одну страницу, мне как-то нужно динамически устанавливать высоту Spacer, чтобы Spacer оставил пространство, оставшееся на странице, как его высоту.

Теперь, как мне получить "остаток" высоты, который остался на моей странице?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Я немного понюхал в библиотеке reportlab и обнаружил следующее: По сути, я решил использовать рамку, в которую будут напечатаны текучие материалы. f._aH возвращает высоту фрейма (мы также можем рассчитать это вручную). Вычитая высоты двух других текучих сред, которые мы получаем через обтекание, мы получаем оставшуюся высоту, которая является высотой прокладки.

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()

проверено и отлично работает.

0 голосов
/ 28 апреля 2010

Насколько я понимаю, вы хотите иметь нижний колонтитул, верно?

Тогда вы должны сделать это так:

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)
...