Ниже приведен мой код для создания PDF с использованием reportlab.Я почти закончил с форматом, но шаблон страницы первой страницы также копируется со второй страницы.Со второй страницы мне просто нужен шаблон из двух столбцов, и мне не нужен формат TopCenter, frame1 и frame2 со второй страницы.
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter,A4
from reportlab.platypus import Image
from reportlab.lib.units import inch, cm
import json
from reportlab.platypus import
BaseDocTemplate,Frame,Paragraph,PageBreak,
PageTemplate,Spacer,FrameBreak,NextPageTemplate
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_JUSTIFY, TA_CENTER
from reportlab.platypus import BaseDocTemplate, Frame, Paragraph,
PageBreak, PageTemplate
from reportlab.lib.styles import getSampleStyleSheet
def foot1(canvas,doc):
width,height = A4
canvas.saveState()
canvas.setFont('Times-Roman',9)
canvas.drawString(width-0.1*inch, 0.1 * inch, "%d" % doc.page)
canvas.restoreState()
def foot2(canvas,doc):
width,height = A4
canvas.saveState()
canvas.setFont('Times-Roman',9)
canvas.drawString(width-0.1*inch, 0.1 * inch,"%d" % doc.page)
def demo1(canvas):
width,height = A4
doc = BaseDocTemplate('test.pdf',showBoundary=1)
contents =[]
styleSheet = getSampleStyleSheet()
TopCenter = Frame(1.2*inch,height-1.2*inch,width-2.4*inch,1*inch,showBoundary = 1,id='normal')
frame1 = Frame(0.2*inch,0.2*inch,(width-0.6*inch)/2, height-1.6*inch,showBoundary = 1,id='col1')
frame2 = Frame(0.4*inch+(width-0.6*inch)/2,0.2*inch, (width-0.6*inch)/2, height-1.6*inch,showBoundary = 1,id='col2' )
leftlogoframe = Frame(0.2*inch,height-1.2*inch,1*inch,1*inch,showBoundary = 1)
rightlogoframe = Frame((width-1.2*inch),height-1.2*inch,1*inch,1*inch,showBoundary = 1)
frame1later = Frame(0.2*inch,0.2*inch,(width-0.6*inch)/2, height-0.4*inch,showBoundary = 1,id='col1later')
frame2later = Frame(0.4*inch+(width-0.6*inch)/2,0.2*inch, (width-0.6*inch)/2, height-0.4*inch,showBoundary = 1,id='col2later' )
firstpage = PageTemplate(id='firstpage',frames=[leftlogoframe,TopCenter,rightlogoframe,frame1,frame2],onPage=foot1)
laterpages = PageTemplate(id='laterpages',frames=[frame1later,frame2later],onPage=foot2)
bodyStyle = ParagraphStyle('Body',fontSize=11)
para1 = Paragraph('Spam spam spam spam. ' * 300, bodyStyle)
contents.append(NextPageTemplate('firstpage'))
logoleft = Image('isclogo.png')
logoleft._restrictSize(0.7*inch, 0.7*inch)
logoleft.hAlign = 'LEFT'
logoleft.vAlign = 'CENTER'
logoright = Image('isclogo.png')
logoright._restrictSize(0.7*inch, 0.7*inch)
logoright.hAlign = 'RIGHT'
logoright.vAlign = 'CENTER'
contents.append(logoleft)
contents.append(FrameBreak())
json_file = open("details.txt","r",encoding='utf-8')
details = json.load(json_file)
isctitle = styleSheet['Title']
isctitle.fontSize=12
isctitle.alignment=TA_CENTER
isctitle.leading=10
contents.append(Paragraph("INTERNATIONAL STUDENT UNION. Raamstraat 78, Delft",isctitle))
theme = styleSheet['Normal']
theme.fontSize=10
theme.alignment=TA_CENTER
theme.leading = 14
contents.append(Paragraph(str(details["theme"]),theme))
celebrant=styleSheet['Normal']
celebrant.fontSize=10
celebrant.alignment=TA_CENTER
celebrant.leading = 14
contents.append(Paragraph(str("President: "+details["president"]),celebrant))
date = styleSheet['Normal']
date.fontSize=10
date.alignment=TA_CENTER
date.leading = 14
contents.append(Paragraph(str(details["date"]),date))
contents.append(FrameBreak())
contents.append(logoright)
contents.append(FrameBreak())
themeimage=Image('isclogo.png')
contents.append(themeimage)
contents.append(para1)
#contents.append(PageBreak())
contents.append(NextPageTemplate('laterpages'))
contents.append(PageBreak())
doc.addPageTemplates([firstpage,laterpages])
#doc.addPageTemplates([PageTemplate(frames=[leftlogoframe,TopCenter,rightlogoframe,frame1,frame2]), ])
#doc.addPageTemplates([PageTemplate(id='OneCol',frames=Top,onPage=foot1),PageTemplate(id='TwoCol',frames=[frame1,frame2],onPage=foot2)])
doc.build(contents)
c = canvas.Canvas("test.pdf",pagesize=A4,bottomup=1)
demo1(c)
Сгенерированный PDF находится здесь https://www.dropbox.com/s/16hogbi6oofqg31/test.pdf?dl=0
Поскольку в Para1 (произвольном словаре) было большое количество данных, шаблон страницы 1 был скопирован на страницу 2. Я хочу, чтобы даже при большом объеме данных на странице 2 был другой шаблон, как видно изстраница 3
Может ли кто-нибудь помочь мне в достижении этого?