Canvas 实例没有属性“drawCenteredString”

问题描述 投票:0回答:2

我在以下代码中的某处收到错误。我已经三次检查了我的文件路径,我相信它们是正确的。我正在遵循一个相当过时的教程,所以我仔细检查了文档,它似乎是正确的。

代码:

# 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]
python csv reportlab
2个回答
1
投票

发现教程中有错误。问题解决了,双重def的generate_certificate,参见下面的解决方案:

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))

0
投票

接受的答案并没有为我解决问题,事实上包含了与我相同的问题:

drawCentredString
方法没有以(美国)预期的方式拼写,并且我在代码中拼写错误。

动词center的意思是“放置在某物的中心”。它的过去时态变化在美式英语和英式英语中有不同的拼写。美式动词变位多了一个字母“e”。

  • 美式:居中
  • 英国:居中

ReportLab Europe Ltd. 是一家总部位于伦敦的英国公司,因此

drawCentredString
方法使用英式拼写:

drawCentredString

不是美式拼写

drawCenteredString

由于大量代码是用美式英语编写的,非美式拼写是意想不到的,这使得这是一个很难解决的错误。

© www.soinside.com 2019 - 2024. All rights reserved.