正文
reportlab使用示例:文字和图片
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
Python的reportlab专门将数据使用生成PDF中的图形和文档功能,
下载ReportLab
https://pypi.python.org/simple/reportlab/
http://www.reportlab.com/software/opensource/rl-toolkit/download/
生成一个简单的helloworld
from reportlab.graphics.shapes import Drawing, String
from reportlab.graphics import renderPDFd = Drawing(100, 100)
s = String(50, 50, 'Hello, world!', textAnchor='middle')
d.add(s)renderPDF.drawToFile(d, 'hello.pdf', 'A simple PDF file')
三条折线
from reportlab.lib import colors
from reportlab.graphics.shapes import *
from reportlab.graphics import renderPDFdata = [
# Year Month Predicted High Low
(2007, 8, 113.2, 114.2, 112.2),
(2007, 9, 112.8, 115.8, 109.8),
(2007, 10, 111.0, 116.0, 106.0),
(2007, 11, 109.8, 116.8, 102.8),
(2007, 12, 107.3, 115.3, 99.3),
(2008, 1, 105.2, 114.2, 96.2),
(2008, 2, 104.1, 114.1, 94.1),
(2008, 3, 99.9, 110.9, 88.9),
(2008, 4, 94.8, 106.8, 82.8),
(2008, 5, 91.2, 104.2, 78.2),
]drawing = Drawing(200, 150)pred = [row[2]-40 for row in data]
high = [row[3]-40 for row in data]
low = [row[4]-40 for row in data]
times = [200*((row[0] + row[1]/12.0) - 2007)-110 for row in data]drawing.add(PolyLine(zip(times, pred), strokeColor=colors.blue))
drawing.add(PolyLine(zip(times, high), strokeColor=colors.red))
drawing.add(PolyLine(zip(times, low), strokeColor=colors.green))drawing.add(String(65, 115, 'Sunspots', fontSize=18, fillColor=colors.red))renderPDF.drawToFile(drawing, 'report1.pdf', 'Sunspots')
最终的sunspot
from urllib import urlopen
from reportlab.graphics.shapes import *
from reportlab.graphics.charts.lineplots import LinePlot
from reportlab.graphics.charts.textlabels import Label
from reportlab.graphics import renderPDFURL = 'http://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt'
COMMENT_CHARS = '#:'drawing = Drawing(400, 200)
data = []
for line in urlopen(URL).readlines():
if not line.isspace() and not line[0] in COMMENT_CHARS:
data.append([float(n) for n in line.split()])pred = [row[2] for row in data]
high = [row[3] for row in data]
low = [row[4] for row in data]
times = [row[0] + row[1]/12.0 for row in data]lp = LinePlot()
lp.x = 50
lp.y = 50
lp.height = 125
lp.width = 300
lp.data = [zip(times, pred), zip(times, high), zip(times, low)]
lp.lines[0].strokeColor = colors.blue
lp.lines[1].strokeColor = colors.red
lp.lines[2].strokeColor = colors.greendrawing.add(lp)drawing.add(String(250, 150, 'Sunspots',
fontSize=14, fillColor=colors.red))renderPDF.drawToFile(drawing, 'report2.pdf', 'Sunspots')