Значение исключения: недопустимый тип для текста аргумента
Я пытаюсь получить параграф с reportlab
но я не могу заставить его работать.
Этот код работает нормально:
p.setFont('Helvetica',8)
labo = str('CANCIÓN').decode('utf-8')
p.setFillColor(HexColor('#ff8100'))
p.drawString(350,736, labo)
Но этот код не:
styles = getSampleStyleSheet()
labo = Paragraph("Generating Reports with Python", styles["Heading1"])
p.drawCentredString(400,600, labo)
Возвращает:
Exception Value: invalid type for argument text
Что я делаю неправильно?
Я думаю, что я импортировал все необходимые модули.
#!/usr/bin/python
# -*- encoding: utf-8 -*-
from reportlab.pdfgen import canvas
from django.http import HttpResponse
from reportlab.lib.pagesizes import letter
from reportlab.lib.colors import HexColor
from reportlab.lib.utils import ImageReader
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph
import os
from io import BytesIO
import PIL.Image
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
1 ответ
Причина, по которой вы получаете эту ошибку, заключается в том, что вы путаете синтаксис. Paragraph
используется в Platypus
в то время как drawCentredString
является основной операцией холста.
Синтаксис для drawCentredString
является canvas.drawCentredString(x, y, text)
который ожидает, что вы будете кормить его текстом как string
так что не Paragraph
объект.
Синтаксис для Paragraph
отличается, он должен выглядеть так:
p = Paragraph("Generating Reports with Python", styles["Heading1"])
p.wrapOn(canvas, 200, 400)
p.drawOn(canvas, 400, 600)
Поэтому после того, как мы создадим абзац, мы сообщим ему, сколько места он может использовать, используя wrapOn
, И после этого мы используем drawOn
нарисовать его на холсте.
Но при этом, как упомянуто выше, используется лишь очень малая часть силы Platypus
(и поэтому Paragraph
). Его можно использовать для обработки всего документа, а не только одного Paragraph
, так что вы можете прочитать главу 5 Руководства пользователя Reportlab, в которой подробно объясняется его использование и преимущества.