Reportlab 表格超出框架

2 投票
2 回答
3087 浏览
提问于 2025-04-18 08:10

我正在把一个项目从Python 2迁移到Python 3,但遇到了一个关于Reportlab的问题。

我在用Platypus的可流动对象KeepInFrame把一个表格放到一个框架里时,设置了mode='shrink'。结果是,表格在垂直方向上会缩小以适应框架,但在水平方向上却没有缩小。水平方向的缩小只会根据垂直方向的缩小比例来进行。垂直方向上,KeepInFrame的效果是正常的,但水平方向上却表现得像是mode='continue'

这是我相关的代码

一开始我这样创建了一个框架

markbook_frame = Frame(cm, 2*cm, 27.7*cm, 17*cm, leftPadding=0, bottomPadding=0,
              rightPadding=0, topPadding=0, id='markbook_frame', showBoundary=1)

然后我把表格添加到故事中,表格在我想要的框架里显示出来

story.append(FrameBreak())
table_story = []
t = Table(data, style=table_style)
table_story.append(t)
t_keep = KeepInFrame(0, 0, table_story, mode='shrink', hAlign='CENTER', vAlign='MIDDLE')
story.append(t_keep)

我的代码在Python 2.7下运行得很好。我在想这个问题是不是因为Reportlab最近迁移到Python 3时出现的?

2 个回答

0

我遇到了这个问题,是因为我把页面的宽度限制在了标准A4纸的大小!我想让页面保持它原本的宽度,希望在转换成PDF时,它们会自动缩小。

<style type="text/css">
body {
    position:relative;
    margin:0 auto;
    /* width:21cm; height:29.7cm; */    /** i Just commented the size of body  **/
    color:#555;
    background:#fff;
    font-family:Arial,sans-serif;
    font-size:14px;
}
</style>
0

在文档中提到

把 fakeWidth 设置为 False,这样 _listWrapOn 才能做正确的事情

所以你的代码

    t_keep = KeepInFrame(0, 0, table_story, mode='shrink', hAlign='CENTER', vAlign='MIDDLE')

应该是

    t_keep = KeepInFrame(0, 0, table_story, mode='shrink', hAlign='CENTER', vAlign='MIDDLE', fakeWidth=False)

撰写回答