Как ввести stati c макет холста в Reportlab Frame - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь создать документ с кадрами, которым можно присвоить определенный макет из Canvas, а затем использовать этот же формат для нескольких кадров.

Так что в идеале этот кадр мог бы расти в зависимости от Текущий размер абзаца внутри рамки. Таким образом, в каждом кадре должен быть заголовок, за которым следует абзац различного размера. Я билась головой о доктора, пытаясь понять это. Мои кадры также должны складываться один поверх другого. Таким образом, в зависимости от размера, если на странице есть один фрейм с большим количеством текста в абзаце, возможно, на страницу уместится только один фрейм. Но если бы было два Фрейма с достаточно маленькими Параграфами, эти два Фрейма поместились бы на одной странице.

Для чего это стоит, вот какой код я начал:

from reportlab.platypus import BaseDocTemplate, Frame, Paragraph, NextPageTemplate, PageBreak, \
    PageTemplate, NextFrameFlowable
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import landscape, letter
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import mm, inch
from reportlab.lib.colors import *
from reportlab.platypus import Paragraph, Frame, Spacer, SimpleDocTemplate

styles = getSampleStyleSheet()
logo_image = r'C:\Users\user\Desktop\FlaskReportApp\application\static\images\logo.JPG'


doc = BaseDocTemplate('basedoc.pdf', defaultPageSize=letter, showBoundary=1)


def foot1(canvas, doc):
    canvas.saveState()
    canvas.setFont('Times-Roman', 14)
    canvas.drawString(inch, 0.75 * inch, "Page %d" % doc.page)
    canvas.drawImage(logo_image, 45, 685, width=150, preserveAspectRatio=True)
    canvas.restoreState()


# Two Columns
frame1 = Frame(doc.leftMargin, inch*8, doc.width, inch*2, id='col1', showBoundary=1)

frame2 = Frame(doc.leftMargin, inch*5.5, doc.width, inch*2, id='col2', showBoundary=1)

template = PageTemplate(id='TwoBoxKeystroke', frames=[frame1, frame2], onPage=foot1)

doc.addPageTemplates([template])

story = []
story.append(Paragraph("Frame one box,  " * 20, styles['Normal']))
story.append(Paragraph("Frame two box,  " * 20, styles['Normal']))

doc.build(story)

Как Вы точно определяете размер кадра в размере c в зависимости от чего-то вроде изменяющегося размера абзаца внутри кадра?

...