2016-07-16 4 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

이 오류가 발생하는 이유는 구문을 혼동하고 있기 때문입니다. 은 Platypus에 사용되고, drawCentredString은 기본 캔버스 작업입니다.

drawCentredString의 구문은 string으로 텍스트를 입력해야하므로 Paragraph 개체가 아니기 때문에 canvas.drawCentredString(x, y, text)입니다.

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 장을 보면 분명히 사용법과 이점이 명확하게 설명되어 있습니다.

관련 문제