Reportlab:将表格对齐到框架的“底部”

Jac*_*aco 8 python pdf reportlab

我在将表格对象与框架底部对齐时遇到问题,hAlign“RIGHT”和“LEFT”有效,但它似乎卡在“TOP”中,如何将表格向下对齐到“MIDDLE”或“框架的底部?下面是一个完整且可运行的示例。请注意,框架内的表格应位于底部,这意味着表格位于右下角(现在,下面的表格位于框架的顶部)。

from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.platypus import Frame, PageTemplate
from reportlab.lib.units import cm
from reportlab.platypus import (Table, TableStyle, BaseDocTemplate)

########################################################################

def create_pdf():
    """
    Create a pdf
    """

    # Create a frame
    CatBox_frame = Frame(
        x1=14.00 * cm,  # From left
        y1=1.5 * cm,  # From bottom
        height=9.60 * cm,
        width=5.90 * cm,
        leftPadding=0 * cm,
        bottomPadding=0 * cm,
        rightPadding=0 * cm,
        topPadding=0 * cm,
        showBoundary=1,
        id='CatBox_frame')

    # Create a table
    CatBox = Table([
        ['', '', '', 'A'],
        ['', '', '', 'B'],
        ['', '', '', 'C'],
        ['AA', 'BB', 'CC', '']], 1.2 * cm, 1.2 * cm, vAlign='BOTTOM')

    # Style the table
    CatBox.setStyle(TableStyle([
        ('SIZE', (0, 0), (-1, -1), 7),
        ('SIZE', (0, 0), (0, 0), 5.5),
        ('TEXTCOLOR', (0, 0), (-1, -1), colors.black),
        ('GRID', (0, 0), (-1, -1), 0.5, colors.black),
        ('VALIGN', (0, 0), (-1, -1), 'BOTTOM'),
    ]))

    # Trying to tell the table to be a bottom align object (when later put in frame)
    CatBox.Align = 'BOTTOM'
    CatBox.vAlign = 'BOTTOM'

    # Building the story
    story = [CatBox] # adding CatBox table (alternative, story.add(CatBox))

    # Establish a document
    doc = BaseDocTemplate("BottomAlignTable.pdf", pagesize=letter)

    # Creating a page template 
    frontpage = PageTemplate(id='FrontPage',
                             frames=[CatBox_frame]
                             )
    # Adding the story to the template and template to the document
    doc.addPageTemplates(frontpage)

    # Building doc
    doc.build(story)


# ----------------------------------------------------------------------
if __name__ == "__main__":
    create_pdf() # Printing the pdf
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:我在 flowables.py 中发现了一个名为 TopPadder 的东西,但不知道如何使用它(当对齐“底部”应该是右、左、上和中的逻辑完成时,感觉就像一个黑客/一个奇怪的应用程序)。(如本文档第 4 页所示:https://www.reportlab.com/examples/rml/test/test_008_tables.pdf

class TopPadder(Flowable): '''包装单个 Flowable,以便填充其第一位以填充空间,使其出现在其框架的底部'''

更新二:是的,我解决了,解决方案是:

from reportlab.platypus.flowables import TopPadder

story = [TopPadder(CatBox)]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Jac*_*aco 2

顶级帕德将解决它。

class TopPadder(Flowable): '''包装单个 Flowable,以便填充其第一位以填充空间,使其出现在其框架的底部'''

在构建“故事”时添加以下内容。

from reportlab.platypus.flowables import TopPadder

story = [TopPadder(CatBox)]
Run Code Online (Sandbox Code Playgroud)