1

2 ページ目に入るのに十分な長さのテーブルを生成しています。私が達成したいのは、2 ページ目の 4 行をスパンすることです。TableStyle で次のコードを使用して実行します。

('SPAN', (0,38), (0,41))

ただし、2行のスパンは機能します。('スパン', (0,38), (0,39))

コードは次のとおりです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from reportlab.platypus import SimpleDocTemplate, Table, LongTable, TableStyle, BaseDocTemplate, Frame, Paragraph, NextPageTemplate, PageTemplate
from reportlab.lib.pagesizes import letter, inch
from reportlab.lib import colors

def testPdf():
    doc = BaseDocTemplate("testpdf.pdf",pagesize=letter,
                        rightMargin=72,leftMargin=72,
                        topMargin=72,bottomMargin=18, showBoundary=True)
    width, height = letter
    print width 
    print height

    elements = []
    datas = []
    for x in range(1,50):
        datas.append(
            [x,x+1]
        )
    t=LongTable(datas)

    tTableStyle=[
        ('SPAN', (0,38), (0,41)),
        ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
        ('BOX', (0,0), (-1,-1), 0.25, colors.black),
    ]
    t.setStyle(TableStyle(tTableStyle))
    elements.append(t)

    frameT = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, id='normal')

    doc.addPageTemplates([PageTemplate(id='OneCol',frames=frameT)])

    doc.build(elements)

if __name__ == '__main__':
    testPdf()
4

1 に答える 1

1

サンプル コードを実行したところ、同じ問題が発生しました。興味があるかもしれない人にとっては、結果として生じるエラーは次のとおりです。

Traceback (most recent call last):
  File "./test.py", line 39, in <module>
    testPdf()
  File "./test.py", line 36, in testPdf
    doc.build(elements)
  File "/usr/local/greenplum-db/ext/python/lib/python2.6/site-packages/reportlab/platypus/doctemplate.py", line 880, in build
    self.handle_flowable(flowables)
  File "/usr/local/greenplum-db/ext/python/lib/python2.6/site-packages/reportlab/platypus/doctemplate.py", line 763, in handle_flowable
    if frame.add(f, canv, trySplit=self.allowSplitting):
  File "/usr/local/greenplum-db/ext/python/lib/python2.6/site-packages/reportlab/platypus/frames.py", line 159, in _add
    w, h = flowable.wrap(aW, h)
  File "/usr/local/greenplum-db/ext/python/lib/python2.6/site-packages/reportlab/platypus/tables.py", line 1113, in wrap
    self._calc(availWidth, availHeight)
  File "/usr/local/greenplum-db/ext/python/lib/python2.6/site-packages/reportlab/platypus/tables.py", line 587, in _calc
    self._calc_height(availHeight,availWidth,W=W)
  File "/usr/local/greenplum-db/ext/python/lib/python2.6/site-packages/reportlab/platypus/tables.py", line 553, in _calc_height
    spanFixDim(H0,H,spanCons,lim=hmax)
  File "/usr/local/greenplum-db/ext/python/lib/python2.6/site-packages/reportlab/platypus/tables.py", line 205, in spanFixDim
    t = sum([V[x]+M.get(x,0) for x in xrange(x0,x1)])
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

並べ替えの答え: これは ReportLab のバグであり、開発者に報告する必要があります。

長い回答: 以前に分割に関する問題を見たことがあります。分割が明らかに可能であるときにアルゴリズムを混乱させる状況がありました (そして明らかに今もそうです) が、アルゴリズムはそれを配置するページを特定できないため、最終的にエラーをスローします。予期しない奇妙なときに発生する可能性があり、自分で手動で分割する以外に特に良い回避策がないことを知っています (またはコンテンツをKeepTogetherフロー可能でラップしますが、それはあなたの状況では機能しません)。

于 2012-04-24T01:01:29.987 に答える