[reportlab轿车呢个(6)]——reportlab类库技术用例-pdf报表 头尾

Reportlab 对生首页和后续页面的处理,定义两个回调函数,如下:

 

def on_first_page(canvas, doc):   
	canvas.saveState()   
	canvas.setFont('song', 9)
	canvas.setFillColor('grey')
	footer = 'Generated by Tweets2pdf at %s' % \
	time.strftime('%a %b %d %H:%M:%S %Y', time.localtime())
	footer += ' Powered by @levin108'
	canvas.drawCentredString((PAGE_WIDTH)/2, 25, footer)
	canvas.restoreState() 
 
def on_later_pages(canvas, doc):   
	canvas.saveState()   
	canvas.setFont('song', 9)   
	canvas.drawString((PAGE_WIDTH/2)-5, 25, u"%d" % (doc.page - 1))   
	canvas.restoreState()
 
pdfdoc.build(elements, onFirstPage = on_first_page, onLaterPages = on_later_pages)


 

 

整个例子

#coding=utf-8
def init_config():
    import reportlab.rl_config
    reportlab.rl_config.warnOnMissingFontGlyphs = 0
    from reportlab.pdfbase import pdfmetrics
    from reportlab.pdfbase.ttfonts import TTFont
    import copy
    pdfmetrics.registerFont(TTFont('zhenhei', 'D:/python_workspace/python_pdf_demo/wqy-zenhei.ttc'))
    stylesheet= getSampleStyleSheet()
    styles= copy.deepcopy(stylesheet['Normal'])
    styles.fontName ='zhenhei'
    styles.fontSize = 20
    return styles
from reportlab.platypus import *
from reportlab.lib.styles import getSampleStyleSheet   
from reportlab.rl_config import defaultPageSize   
from reportlab.lib.units import inch
from reportlab.lib.pagesizes import *
#from reportlab.lib.utils import *
from reportlab.lib.units import mm
styles=init_config() 
PAGE_HEIGHT=defaultPageSize[1]   
PAGE_WIDTH=defaultPageSize[0]
Title = "Hello world"  
pageinfo = "platypus example"  
def myFirstPage(canvas,doc):   
    canvas.saveState()   
    canvas.setFont('zhenhei',16)   
    canvas.drawCentredString(PAGE_HEIGHT/2, PAGE_HEIGHT-108, Title)   
    canvas.setFont('zhenhei',9)   
    canvas.drawString((PAGE_WIDTH/2)-20,10,u"首页")   
    canvas.restoreState() 
def myLaterPages(canvas, doc):   
    canvas.saveState()   
    canvas.setFont('zhenhei', 9)   
    canvas.drawString((PAGE_WIDTH/2)-20,10,u"页码:%d 页" % (doc.page))   
    canvas.restoreState()
def go():   
    doc = SimpleDocTemplate("phello.pdf",pagesize=A4)  
    #Story = [Spacer(1,2*inch)]   
    #style = styles["Normal"]
    i=0
    I=Image("logo.jpg")
    I.drawHeight = 1*inch*I.drawHeight / I.drawWidth
    I.drawWidth = 1*inch
    print doc.allowSplitting
    Story=[]
    for i in range(10):
        Story.append(I)
        Story.append(PageBreak())
    #doc.build(Story)
    doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)
    '''for i in range(100):
        I = Image("logo.jpg")
        #print dir(I)
        #vl=getImageData('logo.jpg')
        #print vl
        #I.drawWidth=
        #I.drawHeight=str(I.imageHeight)+'px'
        bogustext=(u"测试数字:%s."%i)
        p = Paragraph(bogustext, styles)   
        Story.append(p)
        Story.append(I)
        Story.append(Spacer(1,0.2*inch))   
        doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)
        print i'''
if __name__ == "__main__":
   # init_config()
    go()


转自:http://basiccoder.com/tag/python

http://blog.csdn.net/xto/article/details/5403902

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值