2014-05-02 49 views
7

我想在python中用reportlab生成pdf報告。Python Reportlab分頁符

我的目標是讓我的pdf文件的第一頁只有一個簡單的標題和一個沒有實際內容的表格。實際內容將從第二頁開始。

通過查看一些SO帖子後,我發現可以使用afterPage()命令來中斷頁面。所以,我想出了這樣的事情:

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer,KeepTogether,tables 
from reportlab.lib import colors 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.rl_config import defaultPageSize 
from reportlab.lib.pagesizes import A4,landscape 
from reportlab.lib.units import inch,cm,mm 
from reportlab.pdfgen import canvas 

PAGE_HEIGHT = defaultPageSize[1] 
PAGE_WIDTH = defaultPageSize[0] 
styles = getSampleStyleSheet() 
style = styles["Normal"] 

def myFirstPage(canvas, doc): 
    canvas.saveState() 
    canvas.setFont('Times-Bold',15) 
    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-38, 'Title 1') 
    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-58, 'Title 2') 

    NormalStyle = tables.TableStyle([ 
     ('BOX',(0,0),(-1,-1),0.45,colors.blue), 
     ('ALIGN',(0,0),(-1,-1),'LEFT'), 
     ('BACKGROUND',(0,0),(-1,-1),colors.lightblue) 
     ]) 

    mytable = tables.Table([('test','test'),('test2','test2'),('test3','test3')], 
    colWidths = 1* inch,rowHeights= 0.25 *inch,style = NormalStyle) 

    mytable.wrapOn(canvas,PAGE_WIDTH ,PAGE_HEIGHT) 
    mytable.drawOn(canvas,(doc.width/2)-20,700) 

    doc.afterPage() 
    canvas.restoreState() 

def myLaterPages(canvas, doc): 
    canvas.saveState() 
    canvas.setFont('Times-Roman', 9) 
    canvas.restoreState() 

doc = SimpleDocTemplate("myreport.pdf", 
         leftMargin = 0.75*inch, 
         rightMargin = 0.75*inch, 
         topMargin = 1*inch, 
         bottomMargin = 1*inch) 

data = "".join(['this is a test' for i in range(200)]) 
mydata = Paragraph(data,style) 
Story = [Spacer(2.5,0.75*inch)] 
Story.append(mydata) 

doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages) 

但不是所有的標題,表格和內容在第一頁繪製和afterPage()功能不似乎對我的文檔的內容有任何實際效果。

如何更改我的代碼以使內容(我的代碼中的data)從第二頁開始?

回答

13

您可以使用PageBreak()。只需插入Story.append(PageBreak())並從 reportlab.platypus導入。