2010-09-22 120 views
2

我见过很多reportlab绘图示例。生成图形不是问题,我似乎无法弄清楚如何在PDF上显示图形。将图添加到Reportlab PDF

下面是代码:

buffer = StringIO() 
p = canvas.Canvas(buffer, pagesize = letter) 

##### Beginning of code in question 

d = Drawing(200, 100) 
pc = Pie() 
pc.x = 65 
pc.y = 15 
pc.width = 70 
pc.height = 70 
pc.data = [10,20,30,40,50,60] 
pc.labels = ['a','b','c','d','e','f'] 
pc.slices.strokeWidth=0.5 
pc.slices[3].popout = 10 
pc.slices[3].strokeWidth = 2 
pc.slices[3].strokeDashArray = [2,2] 
pc.slices[3].labelRadius = 1.75 
pc.slices[3].fontColor = colors.red 
d.add(pc) 

p.drawPath(d) ### THIS DOES NOT WORK, but need something similar 

#####End of Code in Question 

p.showPage() #Page Two 

p.save() # Saves the PDF and Returns with Response\ 

pdf = buffer.getvalue() 
buffer.close() 
response.write(pdf) 
return response 

我这是怎么显示文本。 p.setFillColorRGB(1,1,1) 头= p.beginText(100,765) header.textLine( “页标题文本”) p.drawText(头)

回答

0

我写这前一段时间,但它是该网站上最受欢迎的文章之一,所以我想它适用于某些网站。

http://www.protocolostomy.com/2008/10/22/generating-reports-with-charts-using-python-reportlab/

如果这还不够,通过让你,让我知道,我会回来,以帮助更多后来当我有更多的时间。

+4

链接不起作用。请发布信息或删除答案。 – Elliptica 2017-06-30 21:17:49

+0

工作链接: http://protocolostomy.com/2008/10/22/generating-reports-with-charts-using-python-reportlab/ – 2017-11-10 18:04:53

3

跳过画布,只是使用绘图小窗口就会生成PDF:

d = Drawing(200, 100) 
pc = Pie() 
pc.x = 65 
pc.y = 15 
pc.width = 70 
pc.height = 70 
pc.data = [10,20,30,40,50,60] 
pc.labels = ['a','b','c','d','e','f'] 
pc.slices.strokeWidth=0.5 
pc.slices[3].popout = 10 
pc.slices[3].strokeWidth = 2 
pc.slices[3].strokeDashArray = [2,2] 
pc.slices[3].labelRadius = 1.75 
pc.slices[3].fontColor = colors.red 
d.add(pc) 

d.save(formats=['pdf'],outDir=None,fnRoot='C:/test') 
+0

我改进的答案:https://stackoverflow.com/a/47229335/6166911 – 2017-11-10 18:52:27

0

如果您需要将图表从添加到您的画布使用d.drawOn(p,0,0)代替p.drawPath(d)

0

改进的答案@siguy例子,使用reportlab 2.7。

from reportlab.lib.colors import red 
from reportlab.graphics.shapes import Drawing 
from reportlab.graphics.charts.piecharts import Pie 

def savePdfGraph(request): 
    d = Drawing(width=400, height=200) 
    pc = Pie() 
    pc.x = 150 
    pc.y = 50 
    pc.width = 70 
    pc.height = 70 
    pc.data = [10, 20, 30, 40, 50, 60] 
    pc.labels = ['a', 'b', 'c', 'd', 'e', 'f'] 
    pc.slices.strokeWidth = 0.5 
    pc.slices[3].popout = 10 
    pc.slices[3].strokeWidth = 2 
    pc.slices[3].strokeDashArray = [2, 2] 
    pc.slices[3].labelRadius = 1.75 
    pc.slices[3].fontColor = red 
    d.add(pc) 

    filename = 'test' 
    base_dir = '/home/' 
    path = os.path.join(base_dir, filename) 
    d.save(formats=['pdf'], outDir=None, fnRoot=path) 
    return redirect('/') 

输出这里:

Generated pdf graph with reportlab 2.7