您的位置:首页 > 其它

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

2013-05-08 10:57 369 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: