2014-09-30 4 views
8

나는 다음과 같은 시도 할 때 :이미지 URL에 reportlab의 drawImage를 사용하려면 어떻게해야합니까?

from reportlab.lib.pagesizes import letter 
from reportlab.pdfgen.canvas import Canvas 
import urllib 
import StringIO 
import PIL.Image 

image_file = urllib.urlopen('https://www.google.com/images/srpr/logo11w.png') 
image_string = StringIO.StringIO(image_file.read()) 
logo = PIL.Image.open(image_string) 

canvas = Canvas('output.pdf', pagesize=letter) 
canvas.drawImage(logo, 10, 10) 
canvas.showPage() 
canvas.save() 

나는이 오류가 발생합니다 :

Traceback (most recent call last): 
    File "imagefromurl.py", line 12, in <module> 
    canvas.drawImage(logo, 10, 10) 
    File "/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.py", line 857, in drawImage 
    imgObj = pdfdoc.PDFImageXObject(name, image, mask=mask) 
    File "/usr/lib/python2.7/dist-packages/reportlab/pdfbase/pdfdoc.py", line 2090, in __init__ 
    ext = string.lower(os.path.splitext(source)[1]) 
    File "/usr/lib/python2.7/posixpath.py", line 96, in splitext 
    return genericpath._splitext(p, sep, altsep, extsep) 
    File "/usr/lib/python2.7/genericpath.py", line 91, in _splitext 
    sepIndex = p.rfind(sep) 
    File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 515, in __getattr__ 
    raise AttributeError(name) 

Reportlab 버전 2.5입니다.

+0

나머지 추적 표시가 누락 된 것 같습니다. – MattDMo

+0

또한 ['reportlab'] (https://pypi.python.org/pypi/reportlab)는 버전 3.1.8까지입니다. 휠로 배포되므로 최신 'pip'를 가지고 있으면 쉽게 업그레이드 할 수 있습니다. – MattDMo

+0

@MattDMo : 고마워요. – ysth

답변

14

나는 힘든 방법으로하고 있었다. 하드 방법 (예를 들어, 로컬 이미지를 대체) 나 이미지 URL을 가져오고이를 처리 할 수있는 실패를 감지 할 수있는 것입니다하지만

from reportlab.lib.pagesizes import letter 
from reportlab.pdfgen.canvas import Canvas 
from reportlab.lib.utils import ImageReader 

logo = ImageReader('https://www.google.com/images/srpr/logo11w.png') 

canvas = Canvas('output.pdf', pagesize=letter) 
canvas.drawImage(logo, 10, 10, mask='auto') 
canvas.showPage() 
canvas.save() 

이 (또한 검은 색이되고 투명 방지하기 위해 필요한 마스크를 추가) 작품 그리고 그렇지 않습니다.