2017-10-11 47 views
0

我在以下代码的某处收到错误。我有三倍检查我的文件路径,我相信他们是正确的。我遵循一个相当过时的教程,所以我仔细检查了文档,看起来是正确的。Python Reportlab pdfgen画布无属性

代码:

# Import data cleaning packages. 
import csv 

# Import pdf filling packages. 
from reportlab.pdfgen import canvas 
from reportlab.lib.pagesizes import letter 
from reportlab.lib.pagesizes import landscape 
from reportlab.platypus import Image 

data_file = '/Users/josephnardone/Desktop/python/data.csv' 


def import_data(data_file): 
    attendee_data = csv.reader(open(data_file,'rb')) 
    for row in attendee_data: 
     last_name = row[0] 
     first_name = row[1] 
     pdf_file_name = last_name + '_' + first_name + '.pdf' 
     generate_certificate(first_name, last_name, pdf_file_name) 

def generate_certificate(first_name, last_name, pdf_file_name): 
    attendee_name = first_name + ' ' + last_name 
    c = canvas.Canvas(pdf_file_name, pagesize = landscape(letter)) 

    # PDF Header Text 
    c.setFont('Helvetica', 30, leading = None) 
    c.drawCenteredString(415, 500, 'Invitation to My Party') 

    c.setFont('Helvetica',15, leading = None) 
    c.drawCenteredString(415, 450, attendee_name) 

    c.showPage() 

    c.save() 

import_data(data_file) 

错误:

Traceback (most recent call last): 
    File "/Users/josephnardone/Desktop/python/pdf_gen.py", line 36, in <module> 
    import_data(data_file) 
    File "/Users/josephnardone/Desktop/python/pdf_gen.py", line 19, in import_data 
    generate_certificate(first_name, last_name, pdf_file_name) 
    File "/Users/josephnardone/Desktop/python/pdf_gen.py", line 27, in generate_certificate 
    c.drawCenteredString(415, 500, 'Invitation to My Party') 
AttributeError: Canvas instance has no attribute 'drawCenteredString' 
[Finished in 0.2s] 

回答

0

错误的教程中。问题解决了,generate_certificate的double def,请参阅下面的解决方案:

def import_data(data_file): 
    attendee_data = csv.reader(open(data_file,'rb')) 
    for row in attendee_data: 
     last_name = row[0] 
     first_name = row[1] 
     pdf_file_name = last_name + '_' + first_name + '.pdf' 

def generate_certificate(first_name, last_name, pdf_file_name): 
    attendee_name = first_name + ' ' + last_name 
    c = canvas.Canvas(pdf_file_name, pagesize = landscape(letter))