2010-09-22 5 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

+0

Рабочая ссылка: http://protocolostomy.com/2008/10/22/generating-reports-with-charts-using-python-reportlab/ –

3

пропустить холст и просто использовать чертеж widget- он будет генерировать 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 –

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

Смежные вопросы