私はReportLabの新しいページテンプレートです。私は2ページのテンプレートがあるレポートを作成する必要があります。最初のページはヘッダーページテンプレートを使用し、他のすべてのページは共通テンプレートを使用します。レポートは、テーブルを複数のページに分割する必要があります。最初のページテーブルでは、より幅の狭いフレームに表示し、残りのテーブルを残りのページの広いフレームに表示する必要があります。Reportlabテーブル分割
異なるページ間でテーブルを分割するとき、列の幅とテーブルのスタイルを変更するにはどうすればよいですか?
編集:ここで私は成功し、それはに基づいて(自動的にそうすることはできないようですすべてのページにわたって、通常のTable
で
# ReportLab PDF Generation Library
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm
from reportlab.lib.pagesizes import letter, landscape
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import BaseDocTemplate, Frame, Paragraph, NextPageTemplate, PageBreak, PageTemplate, Spacer
from reportlab.platypus.tables import Table, TableStyle
# Constants
Font_Leading = 10
Word_Spacing = 0.0
Char_Spacing = 0.08
#global table
data= [['DATE', 'NAME', 'ITEM', 'AMOUNT', 'BALANCE'],
['01/12/15', 'William', 'ITEM1 RELATED STUFF', '365.00', '43.30']
# CONSIDER MANY MORE ITEMS HERE
# NUMBER FO ITMES VARYING IN WAY TO CAUSE 1 OR MORE PAGES
# 3RD COLUMN WILL HAVE DESCRIPTIVE ITEM
# WHICH WILL REPLACE WITH PARAGARPHS LATER ON
]
t=Table(data,repeatRows=1,
colWidths=[.7*inch, 1*inch, 2.4*inch, .8*inch, .8*inch])
#The top left cell is (0, 0) the bottom right is (-1, -1).
tStyle = TableStyle([
# All Cells
('FONTSIZE', (0,0), (-1,-1), 8),
('TOPPADDING', (0,0), (-1,-1), 0),
('BOTTOMPADDING', (0,0), (-1,-1), 0),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('LEADING', (0,0), (-1,-1), 10),
# Top row
('BACKGROUND', (0,0), (-1,0), colors.maroon),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('ALIGN', (0,0), (-1,0), 'CENTRE'),
# 3RD and 4th column,
('ALIGN', (3,0), (4,-1), 'RIGHT'),
# Line commands
# All
('BOX',(0,0),(-1,-1),.5,colors.black),
# top row
('GRID',(0,0),(-1,0),.5,colors.black),
# all columns
('LINEBEFORE',(0,0),(-1,-1),.5,colors.black),
# last column
('LINEAFTER',(-1,0),(-1,-1),.5,colors.black),
# last row
('LINEBELOW',(0,-1),(-1,-1),.5,colors.black)])
t.setStyle(tStyle)
def othPg(c, doc):
t.colWidths = [.2*inch, .2*inch,4*inch, .2*inch, .2*inch]
tStyle.add('BACKGROUND',(0,0),(-1,-1),colors.lightblue)
x=1
def pgHdr(c, doc):
width,height = letter
c.saveState()
c.translate(.3 * inch, 0 * inch)
# STUFF RELATED TO 2 INCH STTIC HEADER FOR FIRST PAGE
c.restoreState()
def main():
pdf_file = 'stmt.pdf'
Elements = []
doc = BaseDocTemplate(pdf_file,
pagesize=letter,
leftMargin=.3*inch,
rightMargin= .1 * inch,
topMargin= .1 * inch,
bottomMargin=.3 * inch,
showBoundary=1)
#normal frame as for SimpleFlowDocument
frameT = Frame(doc.leftMargin + 2*inch, doc.bottomMargin, doc.width - 2.01*inch, doc.height - 4.1*inch, id='normal', showBoundary=0)
frameB = Frame(doc.leftMargin+2, doc.bottomMargin, 7.5*inch, 10*inch, id='small', showBoundary=1)
doc.addPageTemplates([PageTemplate(id='First',frames=frameT,onPage=pgHdr),
PageTemplate(id='Later',frames=frameB,onPage=othPg)
])
Elements.append(NextPageTemplate('Later'))
Elements.append(t)
doc.build(Elements)
if __name__ == "__main__":
sys.exit(main())
テーブルが大きすぎるため、最初のページだけがスペースが少なくなるため、これは実行可能な解決策ではありません。フレームサイズに基づいてデータを分割する方法を提案して、最初のページテンプレートの2つのテーブルを作成し、残りのすべてのページに分割する2つのテーブルを作成できるようにしてください。 – bvnbhati
その場合の問題を示すコードを教えてください。そうすれば、もっと簡単に解決できます。 – B8vrede
@bvnbhatiあなたが探している振る舞いを提供できるはずのコードをいくつか追加しました。 – B8vrede