2016-07-16 66 views
0

我试图获得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 

回答

0

你得到这个错误的原因是你在混合语法。 Paragraph用于Platypus,而drawCentredString是基本的画布操作。

的语法为drawCentredStringcanvas.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,所以你可能想看看Reportlab Userguide的第5章,它清楚地解释了它的用法和优点。

相关问题